开发角色动画系统

来源:互联网 发布:大数据培训考试答案 编辑:程序博客网 时间:2024/09/21 06:33

                                                                                                               角色动画系统

我们先思考一个问题,在游戏里面那些地方需要用到动画,技能释放的时候播放技能动画,走路的时候播放走路动画,攻击的时候播放攻击动画,待机的时候播放待机动画等,还有呢,动画播放的时候还会触发对应的事件行为,比如说,播放攻击动画的时候攻击敌人,当玩家的手离开操作摇杆时,从跑的动画切换到待机动画等。

经过分析呢,我们写两个类,一个类呢专门处理动画播放,叫CharacterAnimation,能给其他类提供 当前动画的参数,是否播放攻击动画,播放动画,另一个类呢专门处理与动画有关的事件行为,能给其他类提供 取消当前动画,播放默认动画。

那在unity里面有现成的动画组件Animator,不需要我们再去编写,我们只需要负责调用就好。

那我们把这两个类写一下

 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

namespace ARPG.Character

{

    /// <summary>

    /// 角色动画控制类

    /// </summary>

    public class CharacterAnimation :MonoBehaviour

    {

        /// <summary>引用动画组件</summary>

        public Animator anim;

        /// <summary>当前动画参数</summary>

        public string currentAnim = "idle";

        /// <summary>是否在播放攻击类动画</summary>

        public bool isAttack = false;

 

 

        public void Start()

        {

            anim =this.GetComponentInChildren<Animator>();

        }

 

        /// <summary>

        /// 播放动画

        /// </summary>

        /// <param name="paramName">动画状态机bool型参数</param>

        public void PlayAnimation(string paramName)

        {

            if (paramName.StartsWith("attack"))

                isAttack =true;

            anim.SetBool(currentAnim,false);

            anim.SetBool(paramName,true);

            currentAnim = paramName;

        }

    }

}

 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

namespace ARPG.Character

{

    public class AnimationEventsBehaviour :MonoBehaviour

    {

        private Animator anim = null;

        private CharacterAnimation chAnim;

        public void Start()

        {

            anim =this.GetComponent<Animator>();

            chAnim =this.transform.parent.GetComponent<CharacterAnimation>();

        }

 

        #region 动画事件响应

        /// <summary>

        /// 取消当前动画,回到默认动画

        /// </summary>

        /// <param name="paramName">动画状态机bool型参数</param>

        public void CancelAnim(string paramName)

        {

            if (paramName.StartsWith("attack") && chAnim != null)

                chAnim.isAttack =false;

            anim.SetBool(paramName,false);

        }

        #endregion

    }

}

       随着开发深度,还是会新增功能和重构部分代码的!!!

0 0