码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 基于DOTween插件实现金币飞行到指定位置功能


    文章目录

    • 前言
    • 一、DOTween是什么?
    • 二、使用步骤
      • 1.导入DOTween插件
        • 在Unity官方插件商店找到`DOTween`插件
        • 导入DOTween插件
        • 启用DOTween插件
      • 2.代码逻辑
        • 金币飞行代码
        • 控制飞行效果代码
      • 3.物体配置
        • 1.物体上装配CoinEffect脚本
        • 2.在金币预制体上装配FlyControl脚本
    • 三、效果展示
    • 总结


    前言

    通过使用 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);
                    });
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    控制飞行效果代码

     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("飞行结束");
            }
    
            /// 
            /// 金币飞行效果,在Update里面调用
            /// 
            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();
                }
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    3.物体配置

    1.物体上装配CoinEffect脚本

    在这里插入图片描述

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

    在这里插入图片描述

    三、效果展示

    请添加图片描述


    总结

    提示:这里对文章进行总结:
    例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 相关阅读:
    【高并发】通过源码深度分析线程池中Worker线程的执行流程
    【 C++ 】用一个哈希表封装unordered_map和unordered_set
    Python爬虫实战,requests+xlwings模块,Python实现制作天气预报表!
    【小程序项目开发 -- 京东商城】uni-app 商品分类页面(下)
    探索未来科技:量子计算的前沿与挑战
    地图/天地图/echarts
    数据结构-二叉树(2)
    【预处理】最大加号标志
    【EI会议征稿】第三届机械自动化与电子信息工程国际学术会议(MAEIE 2023)
    微信小程序云开发入门-数据库插入数据(包含批量)
  • 原文地址:https://blog.csdn.net/ainklg/article/details/134474340
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号