永久免費(fèi)erp長(zhǎng)沙百度網(wǎng)站排名優(yōu)化
文章目錄
- 前言
- 一、DOTween是什么?
- 二、使用步驟
- 1.導(dǎo)入DOTween插件
- 在Unity官方插件商店找到`DOTween`插件
- 導(dǎo)入DOTween插件
- 啟用DOTween插件
- 2.代碼邏輯
- 金幣飛行代碼
- 控制飛行效果代碼
- 3.物體配置
- 1.物體上裝配CoinEffect腳本
- 2.在金幣預(yù)制體上裝配FlyControl腳本
- 三、效果展示
var code = “7307db93-b489-4d94-a4d1-ead66b1b3fa0”
前言
通過(guò)使用 DOTween
插件實(shí)現(xiàn)金幣
兩段飛行效果,第一段在物體周?chē)S機(jī)生成指定數(shù)量的金幣
,第二段將金幣
移動(dòng)到指定位置。
一、DOTween是什么?
DoTween
是Unity的一款插件,主要用于控制物體
的移動(dòng)和變換。
二、使用步驟
1.導(dǎo)入DOTween插件
在Unity官方插件商店找到DOTween
插件
https://assetstore.unity.com/packages/tools/animation/dotween-hotween-v2-27676
導(dǎo)入DOTween插件
啟用DOTween插件
2.代碼邏輯
金幣飛行代碼
public class FlyControl : MonoBehaviour {private Vector3 endPos;private Vector3 startPos;private Vector3 vec1;private Vector3 vec2;[NonSerialized]public bool fly = true;public GameObject coin;//第一段位移 控制隨機(jī)出現(xiàn)在父物體周?chē)?/span>public void FlyCoinOne() {startPos = transform.position;float randomX = Random.Range(-50, 50);float randomY = Random.Range(-50, 50);vec1 = startPos + new Vector3(randomX, randomY, 0);coin.transform.DOMove(vec1, 0.3f).SetTarget(this);}//第二段位移 移動(dòng)到指定位置public void FlyCoinTwo(Transform targetPos) {endPos = targetPos.position;vec2 = endPos;coin.transform.DOMove(vec2, 0.6f).SetTarget(this);float timer1 = 0;DOTween.To(() => timer1, x => timer1 = x, 1, 0.3f).OnStepComplete(() => { this.gameObject.GetComponent<Image>().DOFade(0, 0.3f).SetTarget(this); });float timer = 0;DOTween.To(() => timer, x => timer = x, 1, 0.61f).OnStepComplete(() => {fly = false;//Destroy(this.gameObject);});}}
控制飛行效果代碼
public class CoinEffect : MonoBehaviour{[LabelText("金幣預(yù)制體")] public GameObject prefab;public Transform parent;[LabelText("金幣數(shù)量")] public int num;[LabelText("最終目的地")] public Transform targetPos;[LabelText("金幣飛行速度")] public float time = 1;private int childNum = 0;public bool isEnd = false;private List<FlyControl> ts = new List<FlyControl>();public void StartEffect(){for (int i = 0; i < num; i++){GameObject go = Instantiate(prefab, parent, false);go.transform.position = gameObject.transform.position;FlyControl cc = go.GetComponent<FlyControl>();if (cc != null){cc.gameObject.SetActive(true);ts.Add(cc);childNum++;}ts[i].FlyCoinOne();}}IEnumerator StartEffect1(){yield return new WaitForSeconds(0.6f);for (int i = 0; i <= ts.Count; i++){this.DOKill();yield return new WaitForSeconds(0.1f);var rm = Random.Range(0, ts.Count);yield return new WaitForSeconds(0.01f);ts[rm].FlyCoinTwo(targetPos);// ts.Remove(ts[rm]);Debug.Log(rm);i = 0;}MyLogger.PrintLog("飛行結(jié)束");}/// <summary>/// 金幣飛行效果,在Update里面調(diào)用/// </summary>public void CoinEffectShow(){//第一次飛行StartEffect();//第二次飛行StartCoroutine(StartEffect1());}private void Update(){if (childNum == 0){return;}foreach (var control in ts){if (control.fly){return;}}isEnd = true;if (Input.GetKeyDown(KeyCode.R)){CoinEffectShow();}}}