角色输入控制系统
我们现在有角色的驱动系统了,那我们今天分析一下怎么去操作让角色动起来呢?
我们都在手机上见过摇杆吧,拖动摇杆控制角色的移动和转向,点击按钮释放技能,相信大家都见过的,那我们为了节省时间,减少开发的工作量,我们今天用一个插件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;
}
}
}
随着开发深度,会在原先的代码基础之上增添代码,或重构代码!之前书写不完整,请谅解!