
效果展示
IK(inverse kinematics)反向動力學動畫##
一般我們都是通過父節(jié)點來調(diào)動子節(jié)點運動,而在實際開發(fā)過程中,有時候我們需要子節(jié)點帶動父節(jié)點進行相應的動作。這種情況就是反向動力學。其實在國內(nèi)的游戲中很少看見IK動畫,一般而言國外的游戲較多。例如刺客信條,手部帶動身體的爬行。通俗講:使用場景中的各種物體來控制和影響角色身體部位的運動
IK的作用##
一般來說,我們在特定的場景下,需要我們的游戲?qū)ο笠黄鹂聪蚰骋粋€游戲環(huán)境或者游戲其他對象。而這個時候,反向運動學就可以讓我們很好的做到這種效果。
IK的實例簡介##
首先把我們滿足IK動畫的條件設置.

設置IK動畫

給動畫設置事件

動畫事件對應的方法展示
模型任務看向膠囊的腳本展示##
代碼控制
public class TargetSee : MonoBehaviour {
public Animator animator1;//獲取動畫組件
public Transform target;//看向目標
public Transform instantiatePosition;//實例化小球的位置
public GameObject one;//預制物,用來實例化小球
int speed = 2;
// public Transform aim;
// Quaternion quaternion;
void Start () {
//quaternion = Quaternion.Euler(aim.position);
}
// Update is called once per frame
void Update () {
}
public void Thow()//動畫的Event事件,必須公開不然找不到實例物體
{
GameObject go=GameObject.Instantiate(one, instantiatePosition.position, Quaternion.identity)as GameObject;
//go.AddComponent<Rigidbody>().velocity = target.transform.position - go.transform.position;
go.AddComponent<Rigidbody>().AddForce((target.transform.position - go.transform.position)*speed, ForceMode.Impulse);
//go.transform.Translate(Vector3.forward);
Destroy(go, 2f);
}
private void OnAnimatorIK(int layerIndex)//ik動畫的設置
{
animator1.SetLookAtWeight(1, 1, 1, 1, 1);//設置看向動畫的層
if (target)
{
animator1.SetLookAtPosition(target.position);//設置看的目標
}
//設置右腳的ik
//animator1.SetIKPositionWeight(AvatarIKGoal.RightFoot,1);
//animator1.SetIKPositionWeight(AvatarIKGoal.RightFoot, 1);
//if (aim != null)
//{
// animator1.SetIKRotation(AvatarIKGoal.RightFoot, quaternion);
// animator1.SetIKRotation(AvatarIKGoal.RightFoot,quaternion);
//}
}
}
總結(jié)##
1.明確IK(反向動力學動畫)的用法,SetLookAtWeight()與SetLookAtPosition()的兩個重要方法的熟記.
2.動畫事件的添加及其實現(xiàn)特定功能.