明天实现的内容:
自制按钮类
明天咱们将实现咱们本人的按钮类。按钮类的具体性能是提供按压,刚刚按下,刚刚松开的信号,也就是对按钮进行再封装。对于刚刚按下和刚刚松开信号,我晓得Unity提供了GetButtonDown和GetButtonUp,但我感觉能够学习一下老师的思路,假如未来须要开发新的零碎,就能够通过这个办法实现本人的GetButtonDown和GetButtonUp。

代码如下:

using System.Collections;using System.Collections.Generic;using UnityEngine;// 自制按钮类public class MyButton{    public bool isPressing = false; //正在按压    public bool OnPressed = false; //刚刚按下    public bool OnRelease = false; //刚刚被开释    public bool currentState = false; //以后状态    public bool lastState = false; //上一帧的状态    // 更新MyButton    public void Tick(bool _input)    {        OnPressed = false; //OnPressd只有一种状况下是true 所以每次都先设置为false        OnRelease = false; //与OnPressed同理        currentState = _input; //按键的以后状态永远和对应物理按键的状态统一        isPressing = currentState; //是否被按下 按下就是true        if (currentState != lastState) //判断是否刚刚按下按键或刚刚松开按键        {            if (currentState == true)                OnPressed = true;            else                OnRelease = true;        }        lastState = currentState; //完结时将上一帧状态更新为以后帧状态    }}

逻辑简介
咱们的Button类须要在Input模块的脚本中的Update里始终通过Tick失去GetButton的状态从而进行更新。

    btnA.Tick(Input.GetButton(buttonRun_jab_roll));

IsPressing就是游戏按键是否被按下,只有放弃与物理按键的状态统一就行,当咱们要判断以后是否是刚刚被按下或者刚刚松开时,就须要将以后的状态与上一次的状态相比拟,如果他们不一样,上一次状态是false就阐明刚刚按下了,上一次状态是true就阐明刚刚松开了。

使用自制按钮类
使用这个自制类,原来写在Input脚本中的GetButton就能够全副不要了,拿手柄输出脚本做个例子。

public class JoystickInput : IPlayerInput{    [Header("==== 手柄按键 ====")]    // 角色挪动管制轴    public string movementAxis_X = "X axis";    public string movementAxis_Y = "Y axis";    // 摄像机管制轴    public string cameraAxis_X = "4th axis";    public string cameraAxis_Y = "5th axis";    // 游戏功能键    public string btnA = "A"; //冲刺/后跃/翻滚    public string btnLS = "LS"; //跳跃键    public string btnRB = "RB"; //攻打键    public string btnLB = "LB"; //举盾键    // 自制按键    public MyButton buttonRun_jab_roll = new MyButton(); //冲刺/后跃/翻滚    public MyButton buttonJump = new MyButton(); //跳跃键    public MyButton buttonAttackRHand = new MyButton(); //攻打键    public MyButton buttonDefense = new MyButton(); //举盾键    // Update is called once per frame    void Update()    {        // 更新按键        buttonRun_jab_roll.Tick(Input.GetButton(btnA));        buttonJump.Tick(Input.GetButton(btnLS));        buttonAttackRHand.Tick(Input.GetButton(btnRB));        buttonDefense.Tick(Input.GetButton(btnLB));        // ...                // 冲刺        run = buttonRun_jab_roll.isPressing;        // 攻打信号        attack = buttonAttackRHand.OnPressed;        // 举盾信号        defense = buttonDefense.isPressing;        // 跳跃信号        jump = buttonJump.OnPressed;        // ...    }}