当前位置 博文首页 > 和我一起学习:Unity中Animator组件的基本使用

    和我一起学习:Unity中Animator组件的基本使用

    作者:[db:作者] 时间:2021-08-23 09:43

    在这里插入图片描述

    • Controller:动画控制器
    • Avatar:骨架
    • Apply Root Motion:允许根运动(实现OnAnimatorMove函数时,自动允许)

    属性

    deltaPosition:相对上一帧的位置变化量(必须允许根运动才能被计算)
    deltaRotation:相对上一帧的角度变化量(必须允许根运动才能被计算)
    例如:

    	Vector3 move;
    	CharacterController cont;
    	void Start()
        {
            cont = this.GetComponent<CharacterController>();        
        }
    	void OnAnimatorMove()
        {
        	move = anim.deltaPosition;
        	cont.Move(move);
            //根运动控制的旋转
            transform.rotation *= anim.deltaRotation;
        }
    

    方法

    public static int StringToHash(string name);
    描述:根据动画的名字返回其哈希值,常与GetHashCode配合判断当前播放的动画是不是给定的动画
    参数:name:动画名字
    例如:

    	int deathHash = Animator.StringToHash("EllenDeath");
    	Animator anim;
        AnimatorStateInfo animInfo;
    	void Start()
        {
            anim = this.GetComponent<Animator>();   
        }
        void Update()
        {
            animInfo = anim.GetCurrentAnimatorStateInfo(0);
            if (animInfo.GetHashCode() != deathHash )//当前动画不是死亡动画
            {
            
            }
        }
    

    public AnimatorStateInfo GetCurrentAnimatorStateInfo(int layerIndex);
    描述:返回当前的状态信息
    参数:图层索引
    返回值:动画状态信息,详情见下:

    • length:当前动画的持续时间
    • loop:是否是循环状态
    • shortNameHash:短的名称哈希值,对应的名称不包含父层级名(和GetHashCode函数等效)
    • normalizedTime:标准化时间,整数部分是循环的次数,小数部分是动画播放进度
    • speed:动画播放速度
    • public bool IsName(string name);:当前播放的动画名称是否是name(name必须是层级点动画名,如:Base.Idle)

    public void SetTrigger(string name);
    public void SetTrigger(int id);
    描述:触发一个触发器
    参数:name:触发器名称、id:触发器索引

    public void ResetTrigger(string name);
    public void ResetTrigger(int id);
    描述:重置触发器,如果一个触发器还未来得及触发,那么调用该函数之后,该触发器将不会触发
    参数:name:触发器名称、id:触发器索引

    cs