1、目標
使用例子系統,實現割草后草掉落的特效。
通過PoolManager獲取特效預制體,通過VFXManager來觸發特效。
2、配置例子特效
在Hierarchy -> PersistentScene下創建新物體命名為Reaping。
給該物體添加Particle System組件。
配置例子系統參數:
- Duration:1
- Looping:不勾選
- Start Lifetime:1
- Start Speed:0.2
- Start Size:0.3
- Start Rotation:選擇Random Between Two Constants模式,然后兩個值分別為0和360
- Gravity Modifier:0.3
- Simulation Space:World
- Emiter Velocity:Transform
- Max Particles:25
Emission參數:
- Rate Over Time:25
- Bursts:修改Count為25
Shape參數:
- Shape:Sphere
- Radius:0.26
- Radius Thickness:0.09
Velocity over Lifetime參數:
Color over Lifetime參數:
Size over Lifetime參數:
Rotation over Lifetime參數:
- Angular velocity:180
Noise參數:
- Strength:0.02
- Quality:Medium
Texture Sheet Animation參數:
- Mode:Sprites,圖片選擇effects_0
Renderere參數:
- Material:選擇Sprites-Default
- Min Particle Size:0.005
- Max Particle Size:0.009
- Sorting Layer ID:Instances
- Order in Layer:1
效果如上(此時Looping按鈕被打開):可以看到不停放射出綠色長條,猶如割完草之后葉子掉落。
3、制作粒子預制體
將上述步驟制作的粒子保存為預制體。
在Assets -> Prefabs下創建目錄命名為Crop,此目錄下創建新目錄命名為Effects。
然后將Hierarchy -> PersistentScene下的Reaping物體拖到該目錄下,并且刪除Hierarchy下的Reaping。
4、創建VFX管理器
VFX(Visual Effects),視覺特效。
在該模塊下管理割草后草掉落的視覺特效。
(1)優化EventHandler.cs腳本
添加如下事件:
// Harvest Action Effect Event
public static event Action<Vector3, HarvestActionEffect> HarvestActionEffectEvent;public static void CallHarvestActionEffectEvent(Vector3 effectPosition, HarvestActionEffect harvestActionEffect)
{if(HarvestActionEffectEvent != null){HarvestActionEffectEvent(effectPosition, harvestActionEffect);}
}
(2)優化Enum.cs腳本
public enum HarvestActionEffect
{deciduousLeavesFalling,pipeConesFalling,choppingTreeTrunk,breakingStone,reaping,none
}
(3)創建VFXManager.cs腳本
在Assets -> Scripts -> VFX下創建新腳本命名為VFXManager.cs。
代碼如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class VFXManager : SingletonMonobehaviour<VFXManager>
{private WaitForSeconds twoSeconds;[SerializeField] private GameObject reapingPrefab = null;protected override void Awake(){base.Awake();twoSeconds = new WaitForSeconds(2f);}private void OnDisable(){EventHandler.HarvestActionEffectEvent -= displayHarvestActionEffect;}private void OnEnable(){EventHandler.HarvestActionEffectEvent += displayHarvestActionEffect;}private IEnumerator DisableHarvestActionEffect(GameObject effectGameObject, WaitForSeconds secondsToWait){yield return secondsToWait;effectGameObject.SetActive(false);}private void displayHarvestActionEffect(Vector3 effectPosition, HarvestActionEffect harvestActionEffect){switch(harvestActionEffect){case HarvestActionEffect.reaping:GameObject reaping = PoolManager.Instance.ReuseObject(reapingPrefab, effectPosition, Quaternion.identity);reaping.SetActive(true); StartCoroutine(DisableHarvestActionEffect(reaping, twoSeconds));break;case HarvestActionEffect.none:break;default:break;}}
}
(4)優化Player.cs腳本
優化UseToolInPlayerDirection函數,添加如下一行代碼:
(5)創建VFXManager對象
在Hierarchy -> PersistentScene下創建新的目錄命名為VFXManager。
添加VFXManager組件,并且將Reaping預制體加到Reaping Prefab選項中。
(6)修改PoolManager信息
點擊PoolManager物體,Pool還是保持1,修改Element0的Pool Size為10,將Reaping拖到Prefab選項。