代码整理:
1.提供IsPressing信号,让其他模块或后续模块得知目前用户硬件输入状态。
2.OnPressed 信号,提供…目前是否刚刚按下此按钮。
3.OnReleased信号,…目前是否刚刚释放此按钮。
在Assets目录下新建类程式码(MyButton)1.不继承MonoBehavier;写入三种状态以及两种判断状态。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyButton {
/// <summary>
/// 三种状态(缺省为false)
/// </summary>
public bool IsPressing = false;
public bool OnPressed = false;
public bool OnReleased = false;
private bool curState = false; //目前的状态
private bool lastState = false; //前一次状态
public void Tick(bool input)
{
curState = input;
IsPressing = curState;
OnPressed = false;
OnReleased = false;
if(curState != lastState)
{
if(curState ==true )
{
OnPressed = true;
}
else
{
OnReleased = true;
}
}
lastState = curState;
}
}
2.整理多余代码:
/// <summary>
/// 实例化MyButton按键
/// </summary>
public MyButton buttonA = new MyButton();
public MyButton buttonB = new MyButton();
public MyButton buttonC= new MyButton();
public MyButton buttonD = new MyButton();
public MyButton buttonLB = new MyButton();
public MyButton buttonLT = new MyButton();
void Update () {
//获取输入
buttonA.Tick(Input.GetButton(btnA));
buttonB.Tick(Input.GetButton(btnB));
buttonC.Tick(Input.GetButton(btnC));
buttonD.Tick(Input.GetButton(btnD));
buttonLB.Tick(Input.GetButton(btnLB));
buttonLT.Tick(Input.GetButton(btnLT));
//这四行可以代替以下很多行 动画播放的判断条件(直接控制)
run = buttonA.IsPressing;
jump = buttonB.OnPressed;
attack = buttonC.OnPressed;
defense = buttonB.IsPressing;
}
这样实现了按键式和长摁式键入的整理优化。