您的位置:首页 > 移动开发 > Unity3D

Unity3D一个简单的动画混合Demo

2012-11-30 15:17 369 查看
先说说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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: