一、准备工作
1.unity2017.1 beta:
https://store.unity.com/cn/?_ga=2.23780474.1737557698.1500256804-1748240990.1499999675
2.cinemachine.package:可以在asset store中下载
3.post processing stack.package:可以在asset store中下载
4.相关资料:
(1)Timeline Demo工程
https://forum.unity3d.com/threads/timeline-experimental-preview-release-1.455265/
在网页的最下方下载demo project
(2)Timeline&Cinemachine Demo Video
https://forum.unity3d.com/threads/tutorial-unity-2017-timeline-editor-and-cinemachine.467949/
(3)其他的学习视频可以在youtube上搜索,不过不是很多。。。
二、实践笔记
1、Timeline
(1)、Custom Track
1.脚本继承自TrackAsset,Timeline会自动识别到继承自TrackAsset作为Custom Track
2.通过[TrackClipType(typeof(CustomPlayable))]定义custom track中允许添加的playable clip type
(2)、Playable Track
1.拖动C#脚本到Timeline Editor中,可以控制脚本在时间线上的执行。
2.脚本需要继承BasicPlayableBehaviour类。
3.需要在头部导入相关的包:
using UnityEngine.Playables;
using UnityEngine.Timeline;
4.有如下回调函数:
public Playable CreatePlayable(PlayableGraph graph, GameObject owner);
public void OnBehaviourPause(Playable playable, FrameData info);//时间轴进入Playable Clip
public void OnBehaviourPlay(Playable playable, FrameData info);//时间轴退出Playable Clip
//每次Timeline发生变化时都会先调用OnGraphStop再调用OnGraphStart
//包括:添加和删除Track、添加和删除Playable Clip、开始和结束运行、修改Playable Clip参数等
public void OnGraphStart(Playable playable);//PlayableTrack中加入Playable Clip
public void OnGraphStop(Playable playable);//PlayableTrack中移除Playable Clip
public void OnPlayableCreate(Playable playable);
public void OnPlayableDestroy(Playable playable);
public void PrepareFrame(Playable playable, FrameData info);
public void ProcessFrame(Playable playable, FrameData info, object playerData);//TimeFrame在Playable Clip Duration内发生变化
(3)、Cinemachine Track
1.将摄像机拖到Timeline Track Inspector中,unity会自动在摄像机下添加CinemachineBrain脚本
2.创建GameObject并添加CinemachineVirtualCamera脚本,拖动到Cinemachine Track中作为clip,即可实现在时间线上的镜头切换
3.同一时刻如果有两个virtual camera,可以通过priority来设置优先级高低
4.virtual camera
Lookat:修改虚拟摄像机rotation
Follow:修改虚拟摄像机transform
Aim:Composer type可以设置screen XY(虚拟镜头在屏幕上的焦点位置)、Dead Zone XY、Soft Zone XY等。
Noise:控制镜头的随机摇晃
(4)、Animation Track
Problems:
1.Scale会影响Timeline中的Animation Clip(或许是一个bug,或者是模型pivot的问题?)(Timeline editor中preview是可以的,但是在run mode下就会出现transform的错误)
2.playable director在pause的时候,evaluate可以模拟custom record animation clip的播放,但无法模拟模型自带的animation clip的播放
3.playable director在pause的时候,摄像机会发生突变。也就是说,视角不会固定在当前time的virtual camera上,而是会切回playable director所认为的最高优先级的virtual camera上
(5)、Avtivation Track&Audio Track
比较简单,没什么可以记录的。
(6)、Other Details
1.playable clip
playable.GetTime() 获得clip当前的时间帧(从0.0f到duration)
playable.GetDuration() 获得clip的duration
2.playable director
director.Play() 播放Timeline
director.Pause() 暂停Timeline
director.Stop() 停止Timeline
director.time (可读写)时间帧
director.Evaluate() 跳转Timeline到time处
2、Cinemachine
导入的Cinemachine package中,有CINEMACHINE_install.pdf,作为参考手册。
Package中的Example文件夹中有部分Demo Project也可以作为参考。
(1)Virtual Camera
作为一个Spot,控制Unity Camera的Position,Orientitation等。
可以设置Lens,Aim,Body和Noise(具体自行查阅CINEMACHINE_install)。
(2)Free Lock Camera
相当于是将三个Orbit Body的Virtual Camera串联在一起。
Orbit Body的Virtual Camera可以在一个平面轨道内转动。
则Free Lock Camera可以在三维轨道内转动。
(3)Dolly Camera
所谓的移动摄影车,通过在camera path中添加way point,Cinemachine会自动使用Bezei Function去拟合出camera移动的路线。
创建DollyCamera,会自动生成一个GameObject With CameraPath.cs,同时还会产生一个Virtual Camera,这个虚拟摄像机的Body Type是Tracked Dolly。
设置Follow的GameObject,勾选AutoDolly,摄像机会在CameraPath上自动寻找最近的点去移动。
但是好像不能让摄像机沿着Path自动移动?
(4)State Driven Camera
将Cinemachine与Animator结合起来,Child Virtual Camera与Animator中的State建立起映射,这样在State切换时,Virtual Camera也会切换。
(5)ClearShot Camera
自动Check所有的Child Virtual Camera,选择优先级最高的Camera,将其他设置为Standby。
(6)Group Target Camera
会产生一个Aim为Group Composer的Vcam,同时会产生一个TargetGroup,通过设置Mode,可以选择FinalTarget为Group的几何中心,也可以选择为Group的带权中心。
3、Post Processing Stack
感觉就相当于是一些屏幕后处理。。。
如果需要和Cinemachine进行整合的话,在main camera添加Cinemachine Post FX组件,cinemachine会自动添加Post Processing Behavior组件。这里不需要指定任何Post Processing Profile。
再在每个Vitual Camera下添加Cinemachine Post FX组件,并指定对应的Profile即可。