Unity3D仿星露谷物语开发48之显示树桩效果

发布于:2025-05-24 ⋅ 阅读:(21) ⋅ 点赞:(0)

1、目标

砍完橡树之后会露出树桩,然后树桩可以用斧头收割,并将创建一个新的砍树桩的粒子效果。

这里有:一种作物收获后创造另一种作物的逻辑。

2、分析

在SO_CropDetailsList中,Harvested Transform Item Code可以指定收获后生成的另一种东西。

在之前的实现逻辑中,当作物收获之后就会destroy,并不会另一种作物。

3、修改Crop.cs脚本

修改HarvestActions函数,添加红色方框中的内容:

private void HarvestActions(CropDetails cropDetails, GridPropertyDetails gridPropertyDetails)
{
    SpawnHarvestedItems(cropDetails);

    // Does this crop transform into another crop
    if(cropDetails.harvestedTransformItemCode > 0)
    {
        CreateHarvestedTransformCrop(cropDetails, gridPropertyDetails);
    }



    Destroy(gameObject);  // destory当前Crop类所挂载的实例
}

新增CreateHarvestedTransformCrop函数:

private void CreateHarvestedTransformCrop(CropDetails cropDetails, GridPropertyDetails gridPropertyDetails)
{
    // Update crop in grid properties
    gridPropertyDetails.seedItemCode = cropDetails.harvestedTransformItemCode;
    gridPropertyDetails.growthDays = 0;
    gridPropertyDetails.daysSinceLastHarvest = -1;
    gridPropertyDetails.daysSinceWatered = -1;

    GridPropertiesManager.Instance.SetGridPropertyDetails(gridPropertyDetails.gridX, gridPropertyDetails.gridY, gridPropertyDetails);

    // Display planted crop
    GridPropertiesManager.Instance.DisplayPlantedCrop(gridPropertyDetails);
}

4、创建CropTreeTrunkCanyonOak预设体

在Hierarchy -> PersistentScene下新建物体命名为CropTreeTrunkCanyonOak。

给该物体添加Crop组件。

在其下添加子物体命名为CropSprite,给该物体添加3个组件:Sorting Group/Sprite Renderer/Animator,对应的配置信息如下:

双击Animator组件 -> Controller的TreeTrunk。

将第2个节点名称修改为TreeTrunkVanishingRight。

给CropSprite添加子物体命名为:Trunk,给其添加组件信息如下:

给CropSprite添加子物体命名为:WoodChippingsSpawnPoint,这个是粒子特效的定位点。给其添加组件信息如下:

点击CropTreeTrunkCanyonOak,设置其配置信息:

然后将其拖入到Assets -> Prefabs下:

点击预制体,选择CropSprite(因为它挂载了Animator组件),在Animation界面可以预览特效。

5、修改So_CropDetailsList配置

将CropDetails的数量从2修改为3,具体的配置信息如下:

6、第1次运行游戏

砍伐橡木后会产生树桩,继续砍树桩直到从坑位中消失。

现在我们需要在砍树桩时也产生粒子特效。

7、创建ChoppingTreeTrunk预设体

在Hierarchy -> PersistentScene下新建物体命名为ChoppingTreeTrunk。

添加Particle System组件,配置信息如下:

查看粒子特效:

将该预设体放到Assets -> Prefabs -> Cop -> Effects下,然后删除掉Hierarchy中的。

8、修改PoolManager对象的配置

9、修改VFXManager.cs脚本/配置

[SerializeField] private GameObject choppingTreeTrunkPrefab = null;

 case HarvestActionEffect.choppingTreeTrunk:
     GameObject choppingTreeTrunk = PoolManager.Instance.ReuseObject(choppingTreeTrunkPrefab, effectPosition, Quaternion.identity);
     choppingTreeTrunk.SetActive(true);
     StartCoroutine(DisableHarvestActionEffect(choppingTreeTrunk, twoSeconds));
     break;

代码完成后,配置参数信息:

10、运行游戏2


网站公告

今日签到

点亮在社区的每一天
去签到