Animator Machine Controller Behavior Layer BlendTree IK MatchTarget Record

来源:互联网 发布:最可靠的网络兼职 编辑:程序博客网 时间:2024/06/01 07:11

一、关于Behavior的使用,如下图所示:   ----对应场景BeHaviour

将该脚本挂载在Layers中,那么在执行动画的时候就可以监测到操作了。


由上图可以知,在当前的GameObject中想要访问Animator上面的Behavior脚本,需要通过 Animator组件来获取。


二、Layers分层 ---对应场景Layer

AnimatorColler中创建两个层  Base Layer(基本层), Arm Layer(附加层,用于显示其它的动画) ---(动画切换参数只是一个Speed-float控制走动, Head-trigger控制头部动作)

Arm Layer的设置(在原有的Base Layer上面显示其它动画,但不影响Base Layer动画,如跑动转头)

Weight动画权重-1=100%影响当前动画效果, Mask模型遮罩体, Blending-Addie叠加(由计算机计算后的结果,不稳定), Overide 覆盖(一般用这个,修改动画权重)

(动画圈重调整影响)Sync勾选后可以复制出选中的Layer层, Timing迎合Layer层播放

Avatar Mask遮罩模型,不需要显示的部位点掉就好了



三、BlendTree混合树 --对应场景BlendTree

分为1D, 2D,Direct(这个模式主要是用于脸部等复杂动画,而且模型的脸部结构必须安装官方规定的模式命名和建模)

混合树中的动画最好是保持初始动画相似,播放长度相似设置最佳,放置切换动画不连贯,如下图所示,详细请参照源文件中BlendTree场景中的例子


四、IK反向动力 --对应场景IK


如图所示:角色使用ik看着上面的模型,左手跟随这手边的模型

需要在Animator中设置

代码如下 :


五、Curve模型曲线 --对应场景Curve

如下图所示:

模型动画添加Curves为JumpCurves,并将该名称作为动画参数,类型为Float,这个值在执行当前动画的时候监测到想对应的Curves参数,那么是无法修改该参数的值的,因为该参数只会根据设定的曲线变化而变化



六、MatchTarget --对应场景MatchTarget

匹配位置,必须是动画的BaseLayer(这里弄个大概,没设置得很标准)



七、Record --对应场景Record


代码:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class TestRecord : MonoBehaviour {

    public Slider slider;

    public Button RectBtn;

    public Button PlayBtn;

    public Text text;

    bool isRecting = false;

    bool isPlaying = false;

    public GameObject playerGameObject;

    Animator animator;

    // Use this for initialization
    void Start () 
    {
        text.text = slider.value.ToString();

        RectBtn.onClick.AddListener (delegate {
            Rect();    
        });

        RectBtn.image.color = Color.white;

        PlayBtn.onClick.AddListener (delegate {
            Play();
        });

        PlayBtn.image.color = Color.gray;

        animator = playerGameObject.GetComponent<Animator> ();
    }
    
    // Update is called once per frame
    void Update () {

        if (isPlaying) {
            float time = animator.playbackTime;
            time += Time.deltaTime * animator.GetFloat("AnimatorSpeed");
            if (time > animator.recorderStopTime) {
                time = animator.recorderStartTime;
            }
            animator.playbackTime = time;
        }
    }

    void OnGUI()
    {
        GUILayout.TextArea ("点击Rect录制动画,关闭录制后,点击Play播放,关闭播放后重新录制, 滑动条调整速度   (WASD控制动画)", 30);
    }

    public void OnSpeedChange()
    {
        text.text = slider.value.ToString();
        animator.speed = slider.value;
        animator.SetFloat ("AnimatorSpeed", animator.speed);
    }

    void Rect()
    {
        if (isPlaying)
            return;
        if (isRecting)
            RectEnd();
        else
            RectStart ();
    }

    void Play()
    {
        if (isRecting)
            return;
        if (isPlaying)
            PlayEnd ();
        else
            PlayStart ();
    }

    void RectStart()
    {
        isRecting = true;
        RectBtn.image.color = Color.red;
        PlayBtn.image.color = Color.gray;
        animator.StartRecording (0);
    }

    void RectEnd()
    {
        isRecting = false;
        RectBtn.image.color = Color.white;
        PlayBtn.image.color = Color.white;
        animator.StopRecording ();
    }

    void PlayStart()
    {
        isPlaying = true;
        PlayBtn.image.color = Color.red;
        RectBtn.image.color = Color.gray;
        if (animator.recorderStopTime > 0) {
            animator.StartPlayback ();
            animator.playbackTime = animator.recorderStartTime;
        }
    }

    void PlayEnd()
    {
        isPlaying = false;
        PlayBtn.image.color = Color.white;
        RectBtn.image.color = Color.white;
        animator.StopPlayback ();
    }
}


详细参照链接文件

最后附上源文件链接: http://download.csdn.net/download/u013224660/9475442


0 0
原创粉丝点击