ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

黑魂复刻游戏的自制按钮类——Unity随手记

2021-06-16 16:36:50  阅读:203  来源: 互联网

标签:GetButton false string MyButton Unity 黑魂 按键 public 复刻


今天实现的内容:
自制按钮类
今天我们将实现我们自己的按钮类。按钮类的具体功能是提供按压,刚刚按下,刚刚松开的信号,也就是对按钮进行再封装。对于刚刚按下和刚刚松开信号,我知道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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有