| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> Unity 路径点弧线运动 -> 正文阅读 |
|
[游戏开发]Unity 路径点弧线运动 |
最近项目需要设置围绕路点进行弧线运动,并且每个弧线的都不相同。 首先想到了椭圆形的弧线运动,试做了一版,策划认为弧线的弧度还是达不到要求。 于是,思考贝塞尔曲线运动,网上搜了一下贝塞尔曲线的方法 参考:Unity 工具类 之 贝塞尔 Bezier 曲线_仙魁XAN-CSDN博客 在此基础上只能说是完成关键的路径信息,但是如何运动以及如何配置还不能够完善。 第一步:生成曲线 贝塞尔曲线,通过四个点(包括起始点、终点)生成曲线 如图-四条曲线: ?每个Cube对应路径的曲线 其中:point1/2/3/4各对应cube/1/2/3的四个点的位置信息,目的是为了可视化操作(这里完全可以直接填入四个关键点) 第二步:正向运动 借助DoTween的DoPath(当然,已知这条路径上的路径点,完全可以update下完成操作) 我这里为了方便: Tween pathTween = temp.moveObj.DOPath(temp.points, m_duration, PathType.CatmullRom); pathTween.SetEase(temp.pathData.speedCure); pathTween.SetLoops(-1, LoopType.Restart); pathTween.onComplete = delegate { Debug.LogError("pathTween Complete"); }; 效果是这样: ?第三步:运动的同时加入缩放比例 Sequence mSquence = DOTween.Sequence(); Tween pathTween = temp.moveObj.DOPath(temp.points, m_duration, PathType.CatmullRom); pathTween.SetEase(temp.pathData.speedCure); pathTween.SetLoops(-1, LoopType.Restart); pathTween.onComplete = delegate { Debug.LogError("pathTween Complete"); }; Tween scaleTween1 = temp.moveObj.DOScale(temp.pathData.scale, temp.pathData.timeNode); scaleTween1.onComplete = delegate { Debug.LogError("scaleTween1 Complete"); }; Tween scaleTween2 = temp.moveObj.DOScale(Vector3.one, m_duration-temp.pathData.timeNode); scaleTween2.onComplete = delegate { Debug.LogError("scaleTween2 Complete"); }; mSquence.Insert(0,pathTween); mSquence.Insert(0, scaleTween1); mSquence.Insert(1, scaleTween2); mSquence.SetAutoKill(false); mSquence.Pause(); mSquence.onComplete = delegate { Debug.LogError("Squence Complete"); }; sequenceList.Add(mSquence); 这里用到了:Dotween的Sequence 参考:DOTween Sequence 使用图解_J.J.Cat's Blog-CSDN博客 这里面的timeNode是一个时间节点,指的是在某一个时间点或者说到达某时间点干什么事。 效果: ?第五步:运动过去之后还能反向操作 直接在Sequence上去调用PlayBackward() 注意:必须有mSquence.SetAutoKill(false);这一句,默认是true,会直接kill掉 效果: ? ?所有代码:
一些坑: [CustomEditor(typeof(BezierMotion), true)] 如果不填true的话会提示:Multi-object editing not supported squence Insert必须从0开始 append不能同时多个动画 join也不能同时多个动画 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 22:29:37- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |