Graph相当于一个AnimatorController或者Manager的作用,负责管理Playable的生命周期
所有类名有Playable的,创建都需要使用.Create,不是直接new
创建混合器
需要先创建一个MixerPlayable
//可以在一开始时指定端口数量
//AnimationMixerPlayable mixer1 = AnimationMixerPlayable.Create(graph1, 2);
//也可以在后面再设置端口数量,但是一定要设置,否则会报错!
//端口供后面图连接使用
AnimationMixerPlayable mixer1 = AnimationMixerPlayable.Create(graph1);
mixer1.SetInputCount(2);
//图连接端口,端口的连接相当于电器于排插的连接
//sourceOutputPort相当于一个电器可能有好几条线,需要选择第几条线插上去
//destinationInputPort相当于指定这个电器能插到第几个插孔上
//注意这里的端口位置一定要在给定的数量内,超过会报错
graph1.Connect(idlePlayable, 0, mixer1, 0); //(个人见解:第一个0表示要拿idlePlayable的第0个,第二个0表示要连接到第0个位置上)
graph1.Connect(winPlayable, 0, mixer1, 1);
//函数声明
public bool Connect<U, V>(U source, int sourceOutputPort, V destination, int destinationInputPort)
where U : struct, IPlayable
where V : struct, IPlayable;
注意事项:
1.注意使用了Mixer混合器后,不管是什么Mixer,都需要设置InputWeight,否则Play后没有效果!
2.在playable.Create时,传入的参数一定是要初始化完成的,否则后面再设置就无法起作用
比如:AnimationClipPlayable idlePlayable = AnimationClipPlayable.Create(graph, idle);
如果在调用这段代码时idle为空,那么后面再设置idle也无法正常播动画
playable.ConnectInput和graph.Connect是等价的
//这和下面的graph.Connect是等价的
mixer.ConnectInput(0, idlePlayable, 0);
graph.Connect(idlePlayable, 0, mixer, 0);
3.(重点) 只有Playble才具有Input和Output,而从属于PlayableOutput的则没有,例如AnimationClipPlayable<T>是有Input和output的,而AnimationPlayableOutput是没有Input和Output的。所谓的Input表示Playable的子节点,而Output表示当前Playable的父节点,如下图所示,在左边的为Output,在右边的为Input。注意Mixer也属于是Playable