开发角色输入控制系统

                                                                                                     角色输入控制系统

我们现在有角色的驱动系统了,那我们今天分析一下怎么去操作让角色动起来呢?

我们都在手机上见过摇杆吧,拖动摇杆控制角色的移动和转向,点击按钮释放技能,相信大家都见过的,那我们为了节省时间,减少开发的工作量,我们今天用一个插件EasyTouch,集成度挺高的,主要就是用来控制用户的输入。那我们就叫这个类为CharacterInputController

首先呢,在Unity Asset Store里面找一下EasyTouch,然后下载下来,导入到unity中。怎么使用的话,我就不教了,网上有教程资源的,自己去查一下。那我们把今天角色输入系统写一下吧!

 

using System;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

namespace ARPG.Character

{

    /// <summary>

    /// 角色输入控制系统

    /// </summary>

    public class CharacterInputController : MonoBehaviour

    {

        /// <summary> 角色马达 </summary>

        private CharacterMotor motor;

        /// <summary> 双击间隔时间,此处策划可以调数值,所以用public </summary>

        public float doubleHitInterval = 1.5f;

        /// <summary> 是否双击 </summary>

        private bool isDoubleHit = false;

        /// <summary> 最后一次点击时间 </summary>

        private DateTime lastClickTime;

 

        /// <summary> 角色动画系统 </summary>

        private CharacterAnimation chAnimation;

 

        //给各按钮注册方法

        void OnEnable()

        {

            EasyJoystick.On_JoystickMove += On_JoystickMove;

            EasyJoystick.On_JoystickMoveEnd += On_JoystickMoveEnd;

            EasyButton.On_ButtonPress += On_ButtonPress;

            EasyButton.On_ButtonUp += On_ButtonUp;

            EasyButton.On_ButtonDown += On_ButtonDown;

        }

 

        private void Start()

        {

            motor = GetComponent<CharacterMotor>();

            chAnimation = this.GetComponent<CharacterAnimation>();

        }

 

        /// <summary>

        /// 检测方法是否可行

        /// </summary>

        void Update()

        {

            //motor.Movement(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));

        }

 

        void OnDisable()

        {

            UnRegistClick();

        }

 

        void OnDestroy()

        {

            UnRegistClick();

        }

 

        /// <summary>

        /// 撤销注册方法

        /// </summary>

        private void UnRegistClick()

        {

            EasyJoystick.On_JoystickMove -= On_JoystickMove;

            EasyJoystick.On_JoystickMoveEnd -= On_JoystickMoveEnd;

            //            EasyButton.On_ButtonPress -= On_ButtonPress;

            //            EasyButton.On_ButtonUp -= On_ButtonUp;

            //            EasyButton.On_ButtonDown -= On_ButtonDown;

        }

 

        /// <summary>

        /// 滑动摇杆的时候

        /// </summary>

        /// <param name="move"></param>

        void On_JoystickMove(MovingJoystick move)

        {

            if (!chAnimation.isAttack)

                motor.Movement(move.joystickAxis.x, move.joystickAxis.y);

        }

 

        /// <summary>

        /// 滑动摇杆结束的时候

        /// </summary>

        /// <param name="move"></param>

        void On_JoystickMoveEnd(MovingJoystick move)

        {

            if (!chAnimation.isAttack)

                motor.Movement(move.joystickAxis.x, move.joystickAxis.y);

        }

 

        /// <summary>

        /// button按下的时候

        /// </summary>

        /// <param name="buttonName">button名字</param>

        void On_ButtonPress(string buttonName)

        {

            if (buttonName == "Skill3")

                On_ButtonDown(buttonName);

        }

 

        /// <summary>

        /// 按钮按下的时候

        /// </summary>

        /// <param name="buttonName">按键名字</param>

        public void On_ButtonDown(string buttonName)

        {

            switch (buttonName)

            {

                case "Skill1":

                   //释放技能一

                    break;

                case "Skill2":

                  //释放技能二

                    break;

                case "Skill3":

                    //上一次点击到现在的时间间隔

                    var span = (DateTime.Now - lastClickTime).TotalSeconds;

                    if (span < 1f)

                       //如果间隔时间小于1,什么也不执行

                        return;

                    //如果用户点击间隔时间大于1并且小于双击间隔时间,那么调用技能方法

                    isDoubleHit = span < doubleHitInterval;

                    //更新最后一次点击时间

                    lastClickTime = DateTime.Now;

                    //释放技能三

                    break;

            }

 

 

        }

        /// <summary>

        /// 按钮抬起的时候双击flag是false

        /// </summary>

        /// <param name="buttonName"></param>

        void On_ButtonUp(string buttonName)

        {

            isDoubleHit = false;

        }

    }

}

 

随着开发深度,会在原先的代码基础之上增添代码,或重构代码!之前书写不完整,请谅解!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值