Unity3D Mecanim高级动画系统详解
2017-03-23 本文已影响325人
TonyWan_AR
一、动画模型的导入
![](https://img.haomeiwen.com/i3600969/3fdeaa59f60ce1c6.png)
二、模型的设置
![](https://img.haomeiwen.com/i3600969/65e40af4329e0ce1.png)
![](https://img.haomeiwen.com/i3600969/309b983e8bf69a24.png)
![](https://img.haomeiwen.com/i3600969/1c4eb8e0fa230973.png)
![](https://img.haomeiwen.com/i3600969/79c3cfbb2e0f3240.png)
三、属性面板相关参数介绍
![](https://img.haomeiwen.com/i3600969/50626330975e8df5.png)
![](https://img.haomeiwen.com/i3600969/6b7c486599b044bf.png)
四、状态机的初步使用
![](https://img.haomeiwen.com/i3600969/d0b65234c71f240e.png)
![](https://img.haomeiwen.com/i3600969/a3261d510f57df73.png)
![](https://img.haomeiwen.com/i3600969/fe07f744daeb8c67.png)
![](https://img.haomeiwen.com/i3600969/d4b07bfbf3730c1c.png)
![](https://img.haomeiwen.com/i3600969/8b8c2c045c2b2ff5.png)
![](https://img.haomeiwen.com/i3600969/5f187512a49b0847.png)
五、添加动画连招必杀技事件
![](https://img.haomeiwen.com/i3600969/14a7cb37b859aeea.png)
![](https://img.haomeiwen.com/i3600969/e3d40f568ebef4bd.png)
![](https://img.haomeiwen.com/i3600969/0090c32b81fe4918.png)
六、动画层应用
![](https://img.haomeiwen.com/i3600969/f8660210da1d1c8a.png)
![](https://img.haomeiwen.com/i3600969/574c19b722e1b76a.png)
![](https://img.haomeiwen.com/i3600969/596f7450ed7875fa.png)
七、动画融合树
![](https://img.haomeiwen.com/i3600969/19db8522cdd26c5b.png)
![](https://img.haomeiwen.com/i3600969/5077804595d15ade.png)
![](https://img.haomeiwen.com/i3600969/ca96865304b1200d.png)
八、遮罩
![](https://img.haomeiwen.com/i3600969/8d40aabb3bb90c93.png)
![](https://img.haomeiwen.com/i3600969/a13cc8510949fc4a.png)
![](https://img.haomeiwen.com/i3600969/24a37e0b6c88b27e.png)
![](https://img.haomeiwen.com/i3600969/a100851d361119d0.png)
![](https://img.haomeiwen.com/i3600969/1c34db68736c7d91.png)
![](https://img.haomeiwen.com/i3600969/072839c97b0eaa13.gif)
![](https://img.haomeiwen.com/i3600969/9958f1a7d627561d.gif)
![](https://img.haomeiwen.com/i3600969/4783384440c697fe.gif)
九、IK反向动力学
反向动力学:子物体带动父物体运动
![](https://img.haomeiwen.com/i3600969/747ba9dcf0d3cd32.png)
![](https://img.haomeiwen.com/i3600969/ae23ef700ab2cfbb.png)
![](https://img.haomeiwen.com/i3600969/28a560f9722b81ee.png)
IKController关键代码
public class IKController : MonoBehaviour
{
private Animator ani;
public bool isOpenIK = false;
public Transform lookAtObj;
public Transform leftHandObj;
// Use this for initialization
private void Start()
{
ani = this.GetComponent<Animator>();
}
private void OnAnimatorIK()
{
if (ani)
{
if (isOpenIK)
{
if (lookAtObj != null)
{
ani.SetLookAtWeight(1f);
ani.SetLookAtPosition(lookAtObj.position);
}
else
{
ani.SetLookAtWeight(0f);
}
if (leftHandObj != null)
{
ani.SetIKPositionWeight(AvatarIKGoal.LeftHand, 1f);
ani.SetIKRositionWeight(AvatarIKGoal.LeftHand, 1f);
ani.SetIKPosition(AvatarIKGoal.LeftHand, leftHandObj.position);
ani.SetIKRotation(AvatarIKGoal.LeftHand, leftHandObj.rotation);
}
else
{
ani.SetIKPositionWeight(AvatarIKGoal.LeftHand, 0);
ani.SetIKRositionWeight(AvatarIKGoal.LeftHand, 0);
}
}
}
}
}
![](https://img.haomeiwen.com/i3600969/e76ce50787d70d99.gif)
十、运动重定向
![](https://img.haomeiwen.com/i3600969/f400f44ab1ffaaa6.png)
![](https://img.haomeiwen.com/i3600969/41ef54c1d2c23229.png)
![](https://img.haomeiwen.com/i3600969/c83ce5048ec5fae2.gif)
![](https://img.haomeiwen.com/i3600969/49efff25b969fe1e.gif)
关键代码
public class StoneKingController : MonoBehaviour
{
private Animator ani;
AnimatorStateInfo stateInfor;
bool isCanPlaySkill=false;
// Use this for initialization
void Start ()
{
ani = this.GetComponent<Animator>();
}
// Update is called once per frame
void Update ()
{
if (ani)
{
stateInfor =ani.GetCurrentAnimatorStateInfo(0);
//if (Input.GetKeyDown(KeyCode.W))
// {
// if (!stateInfor.IsName("Walk"))
// {
// ani.SetBool("Walk",true);
// }
// else
// {
// ani.SetBool("Walk",false);
//}
// }
if (Input.GetKeyDown(KeyCode.A))
{
ani.SetTrigger("Attack1");
}
if (Input.GetKeyDown(KeyCode.S))
{
if (stateInfor.normalizedTime>0.5f&&stateInfor.normalizedTime<0.8f)
{
ani.SetTrigger("Attack2");
}
//if (isCanPlaySkill)
//{
//ani.SetTrigger("Attack2");
//}
}
if (Input.GetKeyDown(KeyCode.D))
{
ani.SetTrigger("Death");
}
if (Input.GetKeyDown(KeyCode.E))
{
ani.SetTrigger("Exit");
}
//Run2
if (Input.GetKeyDown(KeyCode.Z))
{
ani.SetBool("Run2",true);
}
//idle2
if (Input.GetKeyDown(KeyCode.I))
{
ani.SetBool("Idle2",true);
}
//walk2
if (Input.GetKeyDown(KeyCode.O))
{
ani.SetBool("Walk2",true);
}
if (Input.GetKeyDown(KeyCode.Q))
{
ani.SetBool("Idle2",false);
ani.SetBool("Walk2",false);
ani.SetTrigger("QuitCurrentLayer");
}
float v=Input.GetAxis("Vertical");//-1~1
ani.SetFloat("Blend",v,1f,Time.deltaTime);
}
}
void StartSkillEvent()
{
//Debug.Log ("可以连招了");
isCanPlaySkill = true;
}
void StopSkillEvent()
{
//Debug.Log ("不可以连招了");
isCanPlaySkill = false;
}
}