您的位置:首页 > 移动开发 > Unity3D

Unity Animator的使用技巧

2016-04-05 12:10 465 查看
1.一个小小的案例:

 此脚本挂在有Animator组件的GameObject上:

private Animator ScAnim;

void Start () {
tmpValue = bloodValue=1f;
ScAnim = this.gameObject.GetComponent<Animator>();获取组件
}
RaycastHit mHit;
// Update is called once per frame
void Update () {
Ray mRay = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Input.GetMouseButtonDown(1))
{

if (Physics.Raycast(mRay, out mHit))//利用射线来检测设置是否被打和是否要攻击。
{
if (mHit.collider.gameObject.tag == "Body")
{
// Debug.Log(ScAnim.GetCurrentAnimationClipState(0)[1]);
ScAnim.SetBool("IsAttacked", true);

}
if (mHit.collider.gameObject.tag == "Head") {
ScAnim.SetBool("IsAttack", true);
}
}
}

AutoResetAnim();//在任意时刻确定播放完一次动画后可以回到之前的状态,并且把SetBool的值变为false。

}
void AutoResetAnim() {
if (ScAnim.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1&&ScAnim .GetCurrentAnimatorStateInfo (0).IsName ("Attacked"))
{
ScAnim.SetBool("IsAttacked", false );
}
if (ScAnim.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1 && ScAnim.GetCurrentAnimatorStateInfo(0).IsName("Attack"))
{
ScAnim.SetBool("IsAttack", false);
}
}
*利用的是
ScAnim.GetCurrentAnimatorStateInfo(0).normalizedTime

它返回一个float值大于等于1则动画播放完一次了。

ScAnim.GetCurrentAnimatorStateInfo(0).IsName("Attack")

<strong>同时确定是否当前播放的是你要的动画。</strong>
ScAnim.IsInTransition(0)


返回bool在状态切换时。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# 脚本 unity