黑魂复刻游戏的自制按钮类——Unity随手记
作者:互联网
今天实现的内容:
自制按钮类
今天我们将实现我们自己的按钮类。按钮类的具体功能是提供按压,刚刚按下,刚刚松开的信号,也就是对按钮进行再封装。对于刚刚按下和刚刚松开信号,我知道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; // ... } }
标签:GetButton,false,string,MyButton,Unity,黑魂,按键,public,复刻 来源: https://www.cnblogs.com/heyu123/p/14889875.html