先說說Unity3D關於動畫方便的東西,Animation Mixing (動畫混合),什麼是動畫混合呢?舉個簡單的例子吧,一個模型現在又3種動作,分別是idle、walk、shoot,在Unity3D中一個Layer只能播放二種動畫,shoot動作隻影響左肩膀的骨骼,而不會影響腿部的動作,所有這裡就可以把shoot和walk進行Mixing。
function Start ()
{
//增加一個動畫剪輯片段
//
animation.AddClip(animation["shoot"].clip, "shootUpperBody");
animation["shootUpperBody"].AddMixingTransform(transform.Find("mover/gun"));
//@parm 路徑
animation["shootUpperBody"].AddMixingTransform(transform.Find("mover/roothandle/spine1"));
//設定動畫模式
animation.wrapMode = WrapMode.Loop;
animation["jump"].wrapMode = WrapMode.Clamp;
animation["shoot"].wrapMode = WrapMode.Clamp;
animation["shootUpperBody"].wrapMode = WrapMode.Clamp;
// Put idle and run in a lower layer. They will only animate if our action animations are not playing
animation["idle"].layer = -1;
animation["run"].layer = -1;
animation.Stop();
}
function Update () {
if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1)
{
animation.CrossFade("run");
animation["run"].speed = Mathf.Sign(Input.GetAxis("Vertical"));
}
else
animation.CrossFade("idle");
if (Input.GetButtonDown ("Jump"))
{
animation.CrossFade("jump", 0.3);
}
if (Input.GetButtonDown ("Fire1"))
{
if (animation["run"].weight > 0.5)
animation.CrossFadeQueued("shootUpperBody", 0.3, QueueMode.PlayNow);
else
animation.CrossFadeQueued("shoot", 0.3, QueueMode.PlayNow);
}