Unity TimeLine丨A3.END-添加跨越墙壁时候的过场动画、Camera Depth

2024-08-14 16:31:35 浏览数 (1)

目标:在目标到达一个区域内时,触发TimeLine的播放

思路:添加Camera,在跳跃时刻切换到另外视角播放翻越墙壁动画

    TimeLine不是指一个制作好的mp4动画片,而是指可设置的运动、Camera、音乐等的集合,运行项目时会运行TimeLine显示我们想要的效果

1、新建名为TimeLine的空GameObject,并给它创建TimeLine(Window-TimeLine Editor),保存TimeLine

2、删掉TimeLine GameObject的Animator组件,和TimeLine窗口中的TimeLine Track

因为我们只对TimeLine GameObject的子物体做控制,不对TimeLine GameObject这个父物体做控制

3、将Main Camera拖到TimeLine制成Activation Track,新建Camera,调整好位置,用来播放跨越墙壁时的动画,赋给TimeLine做成Activation Track,取消激活Camera

但是我们发现,游戏不是在翻越墙壁时启用TimeLine,而是在刚运行时便启用了TimeLine

解决办法:取消勾选TimeLine GameObject-Inspector-Playable Director的Play On Awake选项,在player脚本添加代码,检测到某目标物体时启用TimeLine

4、在游戏场景中添加检测物体Cube,调整大小、位置(将其设置的高一点,避免挡住人物的射线检测),取消Mesh Renderer组件,勾选Box Collider中的Is Trigger,用来检测碰撞

5、给Cube添加Playable Tag,用来通过other.tag检测到它

6、给player脚本添加代码

    在C#调用TimeLine的Playable Director组件,需要UnityEngine.Playables命名空间

    TimeLine里的Playable Director组件,它的  PlayableDirector.Play()  方法,可直接播放对应的TimeLine

指定Player-Inspector public的Director脚本

7、将角色旋转180°,摄像头视角会因为transform.LookAt()代码旋转180°,设置角色离Cube远一点的位置,保证跳跃校测的安全距离

8、运行时我们会发现,角色并没有在刚触及Cube范围内就切换视角,是由于TimeLine中Main Camera运行的时间太长,Camera切换太慢导致

缩小Main Camera所占的时间,调大Camera占用时间

9、添加如下gif所示的观察相机

    此相机制作两个轨道,一个为激活Activation Track,另一个为Animation Track

    Animation Track包括拉远距离、旋转角度效果,可调节动画帧位置等设置改变持续时间和速度等参数

    设置player的Animator Controller中Vault Animation-Inspector的Speed速度,可调整运行中跳跃的快慢

可在正常位置播放正常速度动画,在特定位置通过代码改变某动作播放速度(更该角色的Animator Controller...),达成慢镜头效果

但我们发现,播放完后并不会自动切换到原始Main Camera,现在所有的相机都是激活状态,我们可做一下设置解决此问题:

将三个相机的Clear Flags都设置为Skybox,Main Camera的Depth设置为1>其余两个摄像机的深度,Depth越大,显示会越靠前;在TimeLine设置TimeLine下两个Camera Post-playback state属性为Inactive,作用为播放完当前摄像头所示动画后自动取消激活当前摄像头

10、添加第四个摄像头,用来展示跳跃要结束时的动作

最终效果展示:

0 人点赞