一、关于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.youkuaiyun.com/download/u013224660/9475442