Unity ARPG类游戏 动画、移动、镜头脚本

改进版

输入控制
using UnityEngine;

namespace script
{
   
    public class PlayerInput : MonoBehaviour
    {
   
        protected float InputH;
        protected float InputV;

        //控制角色的速度
        protected float InputSpeed;
        protected bool InputRun;
        protected bool InputJump;
        //是否可移动
        protected bool MoveAble;
        
        // Use this for initialization
        protected virtual void Start()
        {
   
            MoveAble = true;
            InputJump = false;
        }
        

        // Update is called once per frame
        protected virtual void Update()
        {
   

            //要在Update里检测,FixedUpdate可能会错过为GetKeyDown为true的帧
            if (Input.GetKeyDown(KeyCode.Mouse0))
            {
   
                MoveAble = false;
            }

            InputH = Input.GetAxis("Horizontal");
            InputV = Input.GetAxis("Vertical");
            SquareToCircle();

            InputSpeed = Mathf.Sqrt(InputH * InputH + InputV * InputV);
            
            if (Input.GetKey(KeyCode.LeftShift))
            {
   
                InputRun = true;
            }
            else
            {
   
                InputRun = false;
            }
            if (Input.GetKeyDown(KeyCode.Space))
            {
   
                InputJump = true;
            }
            else if (Input.GetKeyUp(KeyCode.Space))
            {
   
                InputJump = false;
            }
        }

        /**
         * 直角坐标转圆形坐标
         */
        private void SquareToCircle()
        {
   
            InputH = InputH * Mathf.Sqrt(1 - InputV * InputV / 2.0f);
            InputV = InputV * Mathf.Sqrt(1 - InputH * InputH / 2.0f);
        }
    }
}
动画控制器
using UnityEngine;
using Random = UnityEngine.Random;

namespace script
{
   
    /**
    * 动画控制器
    */
    public class AnimController : PlayerInput
    {
   
        
        protected bool isHit;
        
        private bool isAttack;
        
        private bool attackFlag;

        private float time;
        private int jumpBool;
        private int speedFloat;
        private int attackBool;
        private float animSpeed;

        protected Camera MainCamera;
        private Animator animator;

        protected virtual void Awake()
        {
   
            animator = GetComponent<Animator>();
        }

        // Use this for initialization
        protected override void Start()
        {
   
            base.Start();
            //获取动画变量的Hash值,提高效率
            jumpBool = Animator.StringToHash("Jump");
            speedFloat = Animator.StringToHash("Speed");
            attackBool = Animator.StringToHash("Attack");
            MainCamera = Camera.main;
            time = 0;
            MoveAble = true;
        }

        /**
     * 播放等待动画
     */
        private void PlayWaitAnim()
        {
   
            if (Input.anyKey)
            {
   
                time = 0;
            }
            else
            {
   
                time += Time.deltaTime;
                //30秒后,随机播放等待动画
                if (time > 30)
                {
   
                    var animCode = Random.Range(1, 5);
                    animator.Play("WAIT0" + animCode, -1);
                    time = 0;
                }
            }
        }

        public void ClearSignalAttack()
        {
   
            MoveAble = true;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值