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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |