基于DOTween插件实现金币飞行到指定位置功能

本文介绍了如何在Unity中使用DOTween插件创建金币两段飞行效果,包括导入插件、编写控制代码和物体配置,展示了如何通过DOTween实现物体的平滑移动和淡出效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


var code = “7307db93-b489-4d94-a4d1-ead66b1b3fa0”

前言

通过使用 DOTween 插件实现金币两段飞行效果,第一段在物体周围随机生成指定数量的金币,第二段将金币移动到指定位置。


一、DOTween是什么?

DoTween 是Unity的一款插件,主要用于控制物体的移动和变换。

二、使用步骤

1.导入DOTween插件

在Unity官方插件商店找到DOTween插件

https://assetstore.unity.com/packages/tools/animation/dotween-hotween-v2-27676
在这里插入图片描述

导入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;

        //第一段位移 控制随机出现在父物体周围
        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);
        }

        //第二段位移 移动到指定位置
        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("金币预制体")] public GameObject prefab;
        public Transform parent;
        [LabelText("金币数量")] 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("飞行结束");
        }

        /// <summary>
        /// 金币飞行效果,在Update里面调用
        /// </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();
            }
        }
    }

3.物体配置

1.物体上装配CoinEffect脚本

在这里插入图片描述

2.在金币预制体上装配FlyControl脚本

在这里插入图片描述

三、效果展示

请添加图片描述

使用Dotween实现在某一处生成4个金币并依次飞向某一个固定位置的步骤如下: 1. 首先,你需要在Unity中导入Dotween插件并进行设置。 2. 在场景中创建一个空物体,用于生成金币设置目标位置。 3. 编写脚本,在脚本中实现金币生成移动的逻辑。可以使用GameObject.Instantiate()方法在空物体位置生成一个金币。 4. 使用Dotween的DoMove()方法实现金币飞向目标位置的动画效果。可以使用Sequence()方法来控制金币的依次移动。 下面是一个简单的示例代码: ```csharp using UnityEngine; using DG.Tweening; public class CoinManager : MonoBehaviour { public GameObject coinPrefab; public Transform target; private void Start() { //生成4个金币 for (int i = 0; i < 4; i++) { GameObject coin = Instantiate(coinPrefab, transform.position, Quaternion.identity); //设置金币移动路径 Sequence seq = DOTween.Sequence(); seq.Append(coin.transform.DOMove(new Vector3(transform.position.x, transform.position.y + 2f, transform.position.z), 1f)); seq.Append(coin.transform.DOMove(new Vector3(target.position.x, target.position.y + 2f, target.position.z), 1f)); seq.Append(coin.transform.DOMove(target.position, 1f)); } } } ``` 在上面的代码中,我们首先在Start()方法中生成4个金币,然后使用Sequence()方法控制金币的移动路径。在移动过程中,我们使用DoMove()方法实现金币的动画效果,金币依次飞向目标位置。 注意:在使用Dotween时,需要在脚本中引入DOTweenDG.Tweening两个命名空间。 希望这个示例能够帮助你实现金币飞行的动画效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值