Unity Avatar动画系统

狂风中的少年 提交于 2019-12-06 21:29:55

Unity Avatar动画系统使用的一些基础属性和方法。以方便日后查找和使用。

using UnityEngine;
using System.Collections;

public class AnimationTest : MonoBehaviour {
	private Animator MasterAnim;
	public GameObject GMaster;
	public bool ikActive;
	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
		MasterAnim = GMaster.GetComponent<Animator> ();
		AnimatorStateInfo stateInfo=MasterAnim.GetCurrentAnimatorStateInfo(0);//获取当前状态机

		float Statelength=stateInfo.length;//动作的总共时间
		Debug.Log ("StateLength" + Statelength);

		float normalizedTime=stateInfo.normalizedTime;//返回了当前动作的时间,整数表示已经循环了几次,小数点后的数字表示目前动作执行的进度
		//stateInfo.normalizedTime > 0.6f当前状态运行了0.6正交化时间(即动作时长的60%)
		Debug.Log("stateNorTime"+normalizedTime);

		int nameHash=stateInfo.nameHash;

		if (stateInfo.nameHash == Animator.StringToHash ("Base Layer.idle") && !MasterAnim.IsInTransition (0)) 
		{
			Debug.Log ("the state is idle");
		}
		else 
		{
			Debug.Log("the state is other");
		}
	
		if (stateInfo.loop == true) //判断动画是否是循环播放
		{
			Debug.Log ("The animation loop");
		} else
		{
			Debug.Log("Tshe animation only one");
		}

		if (stateInfo.IsName ("Base Layer.idle")) 
		{
			Debug.Log ("动画相等");
		}
		else 
		{
			Debug.Log("动画不等");
		}

		MasterAnim.avatar.name="monkeyAvatar";//更换Avatar
	    
		string name = MasterAnim.name;//动作所赋的物体名字
		Debug.Log("name"+name);
         
		//获取当前Clip
		AnimationClip Animaclip = MasterAnim.GetCurrentAnimationClipState(0)[0].clip;

		string Clipname=Animaclip.name;//clip名字
		Debug.Log ("Clipname"+Clipname);

		float ClipLength=Animaclip.length;
		Debug.Log ("ClipLength"+ClipLength);

		//设置IK动画
		/*IK(Inverse Kinematics)反向动力学的使用只能在PRO版中使用

		if(ikActive)

		{
			//设置骨骼的权重,1表示完整的骨骼,如果是0.5哪么骨骼权重就是一半呢,可移动或旋转的就是一半,大家可以修改一下参数试试。
			     
			MasterAnim.SetIKPositionWeight(AvatarIKGoal.RightHand,1f);

			MasterAnim.SetIKRotationWeight(AvatarIKGoal.RightHand,1f);

			//set the position and the rotation of the right hand where the external object is
					
			if(rightHandObj != null)
				{
				//设置右手根据目标点而旋转移动父骨骼节点
						
					MasterAnim.SetIKPosition(AvatarIKGoal.RightHand,rightHandObj.position);
						
					MasterAnim.SetIKRotation(AvatarIKGoal.RightHand,rightHandObj.rotation);
						
				}                  
		}
				//如果取消IK动画,哪么重置骨骼的坐标。
		else
		{          
			MasterAnim.SetIKPositionWeight(AvatarIKGoal.RightHand,0);
				
			MasterAnim.SetIKRotationWeight(AvatarIKGoal.RightHand,0);            
		}
*/

	}
}


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!