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;
代码完成后,配置参数信息: