Unity 3D脚本编程与游戏开发【4.0】

这篇具有很好参考价值的文章主要介绍了Unity 3D脚本编程与游戏开发【4.0】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

7.2.3 DOTween插件使⽤⽅法简介

缓动动画既是⼀种编程技术,也是⼀种动画的设计思路。从设计⾓度来看,可以有以下描述。
①事先设计很多基本的动画样式,如移动、缩放、旋转、变⾊和弹跳等。但这些动画都以抽象⽅式表⽰,⼀般封装为程序函数。
②动画的参数可以在使⽤时指定,如移动的起点和终点、旋转的⾓度、变⾊的颜⾊,还有关键的动画时间⻓度等。
③动画默认是匀速播放,也可以指定播放的时间曲线。如可以做出先快后慢、先慢后快等效果,甚⾄还可以让时间在正向流逝和倒流中交替,实现弹簧式的效果。
④可以按时间顺序任意组合这些动画,如先放⼤再移动、先缩⼩再变⾊再移动等。
⑤可以同时播放多个这些动画。例如,⼀边放⼤⼀边移动、⼀边缩⼩⼀边变⾊⼀边移动等。总之,可以按时间顺序组合,也可以同时组合。
采⽤上⽂的思路,可以封装出易⽤的缓动动画库。例如DOTween就是⼀种常⽤的缓动动画插件。
1. 导⼊DOTween插件
在Asset Store中搜索“DOTween”即可找到DOTween(HOTweenv2)插件,如图7-8所⽰,使⽤免费版即可,下载并导⼊。
Unity 3D脚本编程与游戏开发【4.0】,Unity 3D脚本编程与游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,游戏开发,拖尾特效,DOTween插件使⽤⽅法

                                图7-8 Asset Store中的DOTween插件
导⼊插件后,会⾃动打开⼀个插件窗⼝。单击窗⼝下⽅的按钮即可再打开⼀个DOTween的⼯具⾯板。由于⽬前插件的功能越来越强⼤,因此特意增加了⼀个设置⾯板,如图7-9所⽰。

Unity 3D脚本编程与游戏开发【4.0】,Unity 3D脚本编程与游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,游戏开发,拖尾特效,DOTween插件使⽤⽅法

第⼀次打开设置⾯板时,中间有⼀个红⾊的“DOTWEEN SETUPREQUIRED”提⽰,它表⽰插件需要设置才能使⽤。单击绿⾊的设置按钮,会弹出⼀个新的⻚⾯,等待插件编译完成,会让开发者选择导⼊的模块,如图7-10所⽰。
Unity 3D脚本编程与游戏开发【4.0】,Unity 3D脚本编程与游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,游戏开发,拖尾特效,DOTween插件使⽤⽅法

这⾥列出了⾳频、物理等多个DOTween的模块,选或不选都不影响基础功能的使⽤,单击Apply按钮应⽤即可。
⼩提⽰
DOTween的多个模块
DOTween包含了很多好⽤的模块,甚⾄可以对⾳频做处理。但在⼤部分情况下,只需要常规的移动、缩放、旋转和改变材质的颜⾊,就⾜以做出⼤量的动效了。不导⼊以上模块,就已经默认包含了很多基本的缓动动画。顺利应⽤之后,试验⼀下它的基本使⽤⽅法。创建脚本TestTween,其内容如下。

using UnityEngine;
using DG.Tweening;
public class TestTween : MonoBehaviour {
void Update() {
if (Input.GetKeyDown(KeyCode.D))
{
// 1秒时间移动到在x轴上坐标为5的位置上
transform.DOMoveX(5, 1);
}
if (Input.GetKeyDown(KeyCode.A))
{
// 1秒时间移动到在x轴上坐标为0的位置上
transform.DOMoveX(0, 1);
}
}
}

然后将TestTween脚本组件挂载到任意物体上,按下D键,物体会沿x轴平移到x=5的位置,按下A键,⼜会移动到x=0的位置。可以看出,DOMoveX是⼀个简单的平移动画,第1个参数是x坐标,第2个参数是时间。
2. 基本缓动动画
前⽂已经试验了简单的平移动画,DOTween还提供了⼤量类似的动画模式,最常⽤的旋转、位移和缩放都是直接对Transform组件操作的。各种动画使⽤⽅法⼤同⼩异,列举如下。⾸先是Transform组件的动画,如表7-1所⽰。
表7-1 Transform组件的动画

Unity 3D脚本编程与游戏开发【4.0】,Unity 3D脚本编程与游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,游戏开发,拖尾特效,DOTween插件使⽤⽅法

Unity 3D脚本编程与游戏开发【4.0】,Unity 3D脚本编程与游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,游戏开发,拖尾特效,DOTween插件使⽤⽅法

以上函数基本涵盖了所有的Transform组件缓动动画⽅法。除简单的移动、旋转和缩放动画外,常⽤的还有摄像机缓动动画,作⽤于Camera组件,如表7-2所⽰。
Unity 3D脚本编程与游戏开发【4.0】,Unity 3D脚本编程与游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,游戏开发,拖尾特效,DOTween插件使⽤⽅法

可以⽤缓动动画慢慢改变材质的颜⾊、透明度等,表7-3是作⽤于材质(Material)的缓动动画。
Unity 3D脚本编程与游戏开发【4.0】,Unity 3D脚本编程与游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,游戏开发,拖尾特效,DOTween插件使⽤⽅法

UI⽂本通常需要⼀些动态效果,如打字机效果(⽂字⼀个接⼀个出现)和改变⽂字颜⾊等。DOTween还有⼀些专门⽤于UI⽂本组件(Text)的缓动动画,如表7-4所⽰。
Unity 3D脚本编程与游戏开发【4.0】,Unity 3D脚本编程与游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,游戏开发,拖尾特效,DOTween插件使⽤⽅法

3. 动画曲线(Ease)
        通过试验会发现,前⾯的动画效果都不是匀速运动的,⽽是有⼀个从快到慢的变化。这是因为DOTween默认的动画曲线不是Linear曲线,⽽是Out Quad曲线。
        在缓动动画中,动画曲线称为Ease,它有多种内置的模式,包括通过修改DOTween设置可以改变默认的动画曲线。选择主菜单中的Tools→Demigiant→DOTween Utility Panel可以重新打开DOTween的设置⻚⾯,其中的Ease选项就是动画曲线。可以将默认的Out Quad改为简单的Linear试试效果,如图7-11所⽰。

Unity 3D脚本编程与游戏开发【4.0】,Unity 3D脚本编程与游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,游戏开发,拖尾特效,DOTween插件使⽤⽅法

                                图7-11 设置缓动动画的动画曲线
DOTween提供了⾮常多的缓动动画曲线模式,这⾥不⼀⼀详述。不过常⽤的⼏种模式有明显的命名规则,如In Sine、Out Sine、In Out等,以下进⾏概括的解释。
        In指的是⼀种由慢到快的⽅式,Out则指的是由快到慢。Sine(正弦曲线)指的是⽐较平滑的过渡;⽽Quad则指的是会有更明显的快慢变化;⽐Quad速度变化更剧烈的,还有Cubic、Quart、Quint等。Expo代表指数曲线,还有更多特殊的曲线,如有弹性的Elastic、先后退再前进的Back,以及Bounce(弹跳曲线)。
        当然,如果直接修改默认的动画曲线,那会导致所有动画都使⽤统⼀的曲线。实际上每个动画都可以⽤不同的动画曲线,⽰例写法如下。

if (Input.GetKeyDown(KeyCode.A))
{
Tweener t = transform.DOMoveX(10, 1);
t.SetEase(Ease.OutQuad);
}
if (Input.GetKeyDown(KeyCode.D))
{
transform.DOMoveX(0, 1).SetEase(Ease.InOutSine);
}

DOMove等缓动函数的返回值⽤Tweener类型的变量接收,然后再对Tweener进⾏设置即可。除了SetEase以外还有其他更多可调⽤的⽅法。

4. 动画的组合
使⽤Sequence(缓动动画序列)可以让多个动画依次播放,也可以
在动画之间插⼊等待时间,其⽰例如下。

// 创建动画序列
Sequence seq = DOTween.Sequence();
// 添加动画到序列中
seq.Append(transform.DOMove(new Vector3(3,4,5), 2));
//添加时间间隔
seq.AppendInterval(1);
seq.Append(transform.DOMove(new Vector3(0, 0, 0), 1));
// 按时间插⼊动画
// 下⾯代码的第1个参数为时间,表⽰插⼊动画到规定的时间点
seq.Insert(0, transform.DORotate(new Vector3(0, 90, 0), 1));

缓动动画序列有多个常⽤⽅法,Append可以在序列后⾯添加动画,AppendInterval⽤于添加等待时间,⽽Insert则是在指定时间处插⼊动画。
        特别要注意,使⽤Insert插⼊的动画并不像猜想的那样会将原有动画推迟到后⾯,⽽是会和原来的动画同时播放。这就引出了⼀个关键
问题:DOTween的动画是可以同时播放的,⽽且Sequence虽然名为“序列”,但实际上也⽀持多个动画同时播放。除了利⽤Sequence顺序播放动画或同时播放动画外,实际上直接创建多个动画,它们也会同时播放,其⽰例如下。

// 两个动画同时播放,向斜上⽅移动
Tweener t = transform.DOMoveX(10, 1);
t.SetEase(Ease.OutQuad);
transform.DOMoveY(10, 1);

⼤部分缓动动画可以做到合理混合的效果,但有时同时播放多种动画也会产⽣不合理的结果。某些缓动⽅式带有Blendable关键字,如DOBlendableMoveBy,这类缓动动画能够确保融合效果的正确性。
5. 控制动画的播放
缓动动画最⼤的优势在于它是完全由程序控制的,它的背后是⼀套简洁的数学算法,因此缓动动画很容易实现暂停、重放和倒放等功能。DOTween也提供了多种⽅法控制动画的播放,其⽰例如下。

//播放
transform.DOPlay();
//暂停
transform.DOPause();
//重播
transform.DORestart();
// 倒播,此⽅法会直接退回起始点
transform.DORewind();
//删除动画
transform.DOKill();
//跳转到指定时间点。参数1表⽰跳转的时间点,参数2表⽰是否⽴即播放
transform.DOGoto(1.5f, true);
//倒向播放动画
transform.DOPlayBackwards();
//正向播放动画
transform.DOPlayForward();

6. 动画回调函数
为了更好地让动画与逻辑配合,与动画帧事件类似,也可以为缓动动画添加⼀些回调函数。最常⻅的是在播放结束时⾃动调⽤⼀个函数,其⽰例如下。

// 动画完成回调,为⽅便起⻅回调函数写成了Lambda表达式
transform.DOMove(new Vector3(3,3,0), 2).OnComplete(() => {
Debug.Log("Tween 播放完成");
});
// ⽆限循环震动
Tween t2 = transform.DOShakePosition(1, new Vector3(2, 0,
0));
t2.SetLoops(-1);
// 每次循环完成时回调
transform.DOMove(Vector3.zero, 2).OnStepComplete(() => {
Debug.Log("Tween 单次播放完成");
});
7.2.4 拖尾特效

        拖尾是⼀种很酷的特效。拖尾的原理来⾃⼈类的视觉残留:观察快速移动的明亮物体,会看到物体移动的轨迹。摄像机通过调整快门时间,也可以拍出具有拖尾效果的照⽚,如在城市的夜景中,汽⻋的尾灯拖曳出红⾊的线条。
        在较⽼的Unity版本中,拖尾效果需要⽤插件实现。现在Unity已经内置了Trail Renderer(拖尾渲染器)组件,可以⽅便地制作出拖尾效果。
拖尾渲染器组件的使⽤⽐较简单,其步骤如下。
01 新建⼀个球体,为它添加Trail Renderer组件。
02 不需要运⾏游戏,直接在场景中改变球体位置,就会看到拖尾效果。但由于没有指定拖尾材质,显⽰是紫红⾊(紫红⾊代表材质错误或缺失)。

03 在Trail Renderer组件中找到Materials选项,展开该选项,可以指定材质的数量和材质资源。如果在前⾯的例⼦中已经导⼊粒⼦特效素材,那么通过搜索“Trail”可以找到多个拖尾专⽤的材质,任选⼀个即可。
04 选择材质,再拖曳物体,就会看到拖尾效果了,如图7-12所⽰。

Unity 3D脚本编程与游戏开发【4.0】,Unity 3D脚本编程与游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,游戏开发,拖尾特效,DOTween插件使⽤⽅法

要让拖尾达到较好的效果,就要对拖尾的⻓度(停留时间)、宽度、材质和颜⾊渐变等参数进⾏细致调节。表7-5将逐⼀对TrailRenderer组件的属性做说明。
表7-5 Trail Renderer组件的属性
Unity 3D脚本编程与游戏开发【4.0】,Unity 3D脚本编程与游戏开发,unity,3d,游戏引擎,Unity 3D脚本编程,游戏开发,拖尾特效,DOTween插件使⽤⽅法

还有⼀些与光照、⾼级渲染相关的属性,它们的使⽤与光照和渲染有关,此处不再详述。
将拖尾设置完成以后,会在物体运动时⾃动出现,不需要额外设置。脚本主要是开启或关闭拖尾,以及改变拖尾的时间、材质等,其⽰例如下。

using UnityEngine;
public class TestTrail : MonoBehaviour
{
TrailRenderer trail;
public Material mat1;
public Material mat2;
void Start()
{
trail = GetComponent<TrailRenderer>();
trail.sharedMaterial = mat1;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
if (trail.sharedMaterial == mat1)
{
trail.sharedMaterial = mat2;
trail.startColor = Color.red;
trail.endColor = Color.red;
}
else
{
trail.sharedMaterial = mat1;
trail.startColor = Color.blue;
trail.endColor = Color.blue;
}
}
}
}

        将上⽂的脚本挂载到有Trail Renderer组件的物体上,并给脚本设置两种拖尾材质。运⾏游戏,并在场景中改变物体位置来测试拖尾。再单击Game窗⼝并按空格键,就可以动态修改拖尾的材质和颜⾊。文章来源地址https://www.toymoban.com/news/detail-845659.html

到了这里,关于Unity 3D脚本编程与游戏开发【4.0】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 3D脚本编程与游戏开发(2.6)

    4.5.2 四元数的概念         四元数包含⼀个标量分量和⼀个三维向量分量,四元数Q可以记作Q=[w,(x,y,z)]         在3D数学中使⽤单位四元数表⽰旋转,下⾯给出四元数的公式定义。对于三维空间中旋转轴为n,旋转⾓度为a的旋转,如果⽤四元数表⽰,则4个分量分别为

    2024年02月03日
    浏览(38)
  • Unity 3D脚本编程与游戏开发【4.2】

    8.2.3 ⾳频管理器         在实际游戏开发中,⾳效既是⼀个相对独⽴的部分,⼜与其他游戏逻辑密切关联。也就是说,与⾳效相关的代码会插⼊很多细节代码中。         ⽽且在⾳效⾮常丰富的情况下,如果每⼀个游戏模块都单独播放⾳效,那么可能会带来⼀些问题。

    2024年04月24日
    浏览(30)
  • Unity 3D脚本编程与游戏开发(2.8)

    5.1.2 矩形变换(Rect Transform)组件         如果选中界⾯上的控件,读者会发现每个物体并不带有基本的Transform组件,取⽽代之的是Rect Transform(矩形变换)组件。其实Rect Transform组件是Transform组件的⼦类,因此并不违反“每个物体必须有且只有⼀个Transform组件”的规定。

    2024年02月03日
    浏览(30)
  • Unity 3D脚本编程与游戏开发(3.2)

    5.3.4 制作背包界⾯         背包界⾯是此实例中的重点,因为它的屏幕适配⽐较有代表性。当屏幕⽐较“瘦⾼”时,道具列表中能显⽰更多道具项,⽽屏幕⽐较“矮胖”时,显⽰的道具项会变少。但这些都不影响玩家通过下拉滑动查看所有道具,如图5-37所⽰。       

    2024年04月12日
    浏览(42)
  • Unity 3D脚本编程与游戏开发(2.5)

    4.3.4 向量的点积         两个向量的点积是⼀个标量,其数值为两者⻓度相乘,再乘以两者夹⾓的余弦: a·b=|a|·|b|cosθ⽤坐标表⽰,公式为 (x1,y1,z1)·(x2,y2,z2)=x1x2+y1y2+z1z2         注意到,两个向量的点积是⼀个数(标量),只有⼤⼩,没有⽅向。⽽且点乘满⾜交换律,

    2024年02月03日
    浏览(36)
  • Unity 3D脚本编程与游戏开发【4.1】

    7.2.5 后期处理举例 Post Processing(后期处理)并不属于特效,但现代的特效表现离不开后期处理的⽀持。本⼩节以眩光(Bloom)为例,展⽰⼀种明亮的激光的制作⽅法,其效果如图7-13所⽰。 1. 安装后期处理扩展包         较新的Unity版本(如2018.4版本)已经内置了新版的后

    2024年04月26日
    浏览(27)
  • Unity 3D脚本编程与游戏开发(2.2)

    3.2.7 修改物理材质         每个物体都有着不同的摩擦⼒。光滑的冰⾯摩擦⼒很⼩,⽽地毯表⾯的摩擦⼒则很⼤。另外每种材料也有着不同的弹性,橡⽪表⾯的弹性⼤,硬质地⾯的弹性⼩。在Unity中这些现象都符合⽇常的理念。         虽然从原理上讲,物体的摩擦⼒

    2024年02月04日
    浏览(33)
  • Unity 3D脚本编程与游戏开发【3.7】

            在这个⾓⾊控制脚本中,可以看到很多新奇的写法。关键是,为什么要把移动量转化为转⾝量和前进量呢?要理解这个问题,⼀定要多进⾏游戏测试,体会转⾝与输⼊的关系。         当⾓⾊⾯朝前,输⼊朝后时,⾓⾊的前进量为0,转⾝量达到最⼤;⽽当⾓⾊

    2024年04月15日
    浏览(26)
  • Unity 3D游戏开发+脚本编程完整指南:制作第一个游戏:3D滚球跑酷

    教程相关资源 Unity 3D游戏开发+脚本编程完整指南(工程文件+PPT).zip 本节利用前面的知识来实现第一个较为完整的小游戏,如 图 1-21 所示。 图1-21 3D滚球跑酷游戏完成效果 1. 功能点分析 游戏中的小球会以恒定速度向前移动,而玩家控制着小球 左右移动来躲避跑道中的黄色障

    2024年02月21日
    浏览(38)
  • Unity物理系统脚本编程(上)

    当一个物体挂载了刚体时,即可在脚本中获取该物体的刚体组件,代码如下 Rigidbody rigid; void Start() { rigid=GetComponentRigidbody(); } 一般将刚体变量命名为rigid并定义为一个字段,方便复用. 最常用的施加作用力的方法是AddForce(),参数为Vector3类型。代码如下 rigid.AddForce(new Vector

    2024年02月04日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包