纳金网

标题: 简单的动画混合 Animation Mixing [打印本页]

作者: 狂风大尉    时间: 2014-6-25 01:23
标题: 简单的动画混合 Animation Mixing
Animation Mixing (动画混合),什么是动画混合呢?举个简单的例子吧,一个模型现在有3种动作,分别是idle、walk、shoot,在Unity3D中一个Layer只能播放二种动画,shoot动作只影响左肩膀的骨骼,而不会影响腿部的动作,所有这里就可以把shoot和walk进行Mixing。
  1. function Start ()
  2. {

  3. //增加一个动画剪辑片段

  4. //
  5. animation.AddClip(animation["shoot"].clip, "shootUpperBody");
  6. animation["shootUpperBody"].AddMixingTransform(transform.Find("mover/gun")); //@parm 路径
  7. animation["shootUpperBody"].AddMixingTransform(transform.Find("mover/roothandle/spine1"));
  8. //设置动画模式
  9. animation.wrapMode = WrapMode.Loop;

  10. animation["jump"].wrapMode = WrapMode.Clamp;
  11. animation["shoot"].wrapMode = WrapMode.Clamp;
  12. animation["shootUpperBody"].wrapMode = WrapMode.Clamp;

  13. // Put idle and run in a lower layer. They will only animate if our action animations are not playing
  14. animation["idle"].layer = -1;
  15. animation["run"].layer = -1;

  16. animation.Stop();
  17. }
  18. //Unity3D:www.unitymanual.com

  19. function Update () {
  20. if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1)
  21. {
  22.   animation.CrossFade("run");
  23.   animation["run"].speed = Mathf.Sign(Input.GetAxis("Vertical"));
  24. }
  25. else
  26.   animation.CrossFade("idle");

  27. if (Input.GetButtonDown ("Jump"))
  28. {
  29.   animation.CrossFade("jump", 0.3);
  30. }
  31.   if (Input.GetButtonDown ("Fire1"))
  32. {
  33.   if (animation["run"].weight > 0.5)
  34.    animation.CrossFadeQueued("shootUpperBody", 0.3, QueueMode.PlayNow);
  35.   else
  36.    animation.CrossFadeQueued("shoot", 0.3, QueueMode.PlayNow);
  37. }
复制代码

作者: hyui    时间: 2014-6-25 02:34
Thanks for sharing your experience!
作者: hariboot    时间: 2014-6-25 08:55
这代码很实用
作者: wucnj    时间: 2014-6-25 09:03
感谢分享!!!
作者: HIDEOKOJIMA    时间: 2014-6-25 16:52
感谢分享!
作者: shenyg77    时间: 2014-8-12 21:02
Thanks for sharing !




欢迎光临 纳金网 (http://www.narkii.com/club/) Powered by Discuz! X2.5