Unity實現領取獎勵特效
阿新 • • 發佈:2020-10-29
本文例項為大家分享了Unity實現領取獎勵特效的具體程式碼,供大家參考,具體內容如下
一、效果演示
二、實現
匯入Dotween外掛
完整程式碼
using System; using UnityEngine; using DG.Tweening; /// <summary> /// 特效管理 /// </summary> public class EffectManager : MonoBehaviour { //單例 private static EffectManager _instance; public static EffectManager Instance { get { if (_instance == null) { GameObject go = new GameObject(typeof(EffectManager).ToString()); DontDestroyOnLoad(go); _instance = go.AddComponent<EffectManager>(); } return _instance; } } /// <summary> /// 顯示獎勵特效 /// </summary> /// <param name="startPos">例項化出來的位置</param> /// <param name="targetPos">目標位置</param> /// <param name="parent">父物體</param> /// <param name="prefabName">預製體名稱</param> /// <param name="siblingIndex">子層級下的索引</param> /// <param name="num">例項化的數量</param> /// <param name="onFinish">回撥</param> public void ShowAwardEffect(Vector3 startPos,Vector3 targetPos,Transform parent,string prefabName,int siblingIndex = -1,int num = 10,Action onFinish = null) { //渲染UI的相機名稱和畫布名稱 Camera uiCamera = GameObject.Find("UICamera").GetComponent<Camera>(); Canvas uiCanvas = GameObject.Find("Canvas").GetComponent<Canvas>(); if (uiCamera == null || uiCanvas == null) { return; } var seq = DOTween.Sequence(); for (int i = 0; i < num; i++) { GameObject prefab = Instantiate(Resources.Load<GameObject>(prefabName));//根據專案路徑進行修改 prefab.transform.SetParent(parent,false); if (siblingIndex != -1) { prefab.transform.SetSiblingIndex(siblingIndex); } float randomTime = UnityEngine.Random.Range(0.4f,0.6f); prefab.transform.position = startPos; seq.Insert(0,prefab.transform.DOMove(startPos + UnityEngine.Random.insideUnitSphere,randomTime)).SetEase(Ease.OutSine); seq.Insert(randomTime,prefab.transform.DOMove(targetPos,UnityEngine.Random.Range(0.8f,1.2f)).SetEase(Ease.InOutSine).OnComplete (() => { Destroy(prefab); })); } seq.SetUpdate(true); seq.AppendCallback(() => { onFinish?.Invoke(); }); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。