Unity中实现领取奖励特效

一:效果演示


二:实现

——导入Dotween插件

 


——完整代码

using System;
using UnityEngine;
using DG.Tweening;/// 
/// 特效管理
/// 
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();}return _instance;}}/// /// 显示奖励特效/// /// 实例化出来的位置/// 目标位置/// 父物体/// 预制体名称/// 子层级下的索引/// 实例化的数量/// 回调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();Canvas uiCanvas = GameObject.Find("Canvas").GetComponent();if (uiCamera == null || uiCanvas == null){return;}var seq = DOTween.Sequence();for (int i = 0; i < num; i++){GameObject prefab = Instantiate(Resources.Load(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();});}
}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部