unity 按键 来加一点点细节一点细节细节细节细节细节

unity 按键 来加一点点细节一点细节细节细节细节细节

让我们添加一些细节

小细节

首先添加一个传入参数GameObject go到基类函数execute

public abstract class Commend
{
    public abstract void execute(GameObject go);
}

对应的移动命令变成了这样

//移动命令
public class MoveCommend : Commend
{
    Unit unit;
    public override void execute(GameObject go)
    {
        unit = go.GetComponent<Unit>();
        unit.move();
    }
}

然后在按钮响应 InputHandle 中添加一个按钮

 //接受命令的物体
public GameObject go;

然后添加一个

//使被点击的物体接受命令
private void OnMouseDown()
{
    GetComponentInParent<InputHandel>().go = gameObject;
}

unity安卓虚拟按键_unity 按键_unity实现组合按键

恭喜你unity 按键,你可以切换接受命令的对象了。只需将Unit组件分别添加到两个对象中,点击对应的对象,就会成为接受命令的对应对象。当然,缺点是两个对象必须具有相同的顺序。

在这里插入图片描述

点击小球,按下j键,小球就会移动。然后点击长方体,按j键,会变成长方体移动。

自定义按钮

下一项工作是自定义按钮。

Unit功能基本不变

因为键盘不能全部用完,需要加一个空命令

public class NullCommend : Commend
{
    public override void execute(GameObject go)
    {
        
    }
}

里面没有什么可写的。当按钮无效时,将命令分配给它。

键盘响应功能

public class InputHandel : MonoBehaviour
{
    //26键对应命令数组
    public Commend[] keys = new Commend[26];
    //接受命令的物体
    public GameObject go;
    //改变按钮绑定时关闭按钮响应
    public bool changeTime;
    private void Start()

unity安卓虚拟按键_unity 按键_unity实现组合按键

{ //26键初始化 for(int i=0; i<26; i++) { keys[i] = new NullCommend(); } keys[9] = new MoveCommend(); //j keys[10] = new JumpCommend();//k changeTime = true; } private void Update() { inputListen(); } //按钮响应 void inputListen() { if (changeTime) { for (int i = 0; i < 26; i++) { //ASCII码转换成键盘对应按键 int x = 97 + i; char y = (char)x; string s = y.ToString();

unity 按键_unity安卓虚拟按键_unity实现组合按键

if (Input.GetKey(s)) { //调用对应按键命令 keys[i].execute(go); } } } } }

1、需要一个changeTime来决定是否响应,因为输入字母算作按钮响应。

2、开始初始化是默认设置j、k游戏动态,其他键设置为空命令

3、每帧更新监视器

4、input 需要将 ASCII 转换为键盘对应的按键。一帧循环26次,当按下其中一个按钮时,执行相应的命令。

有人会问,在哪里切换绑定?不用担心,创建一个新的 UI 以输入所需的键

在这里插入图片描述

当点击更改按钮时,之前设置的changeTime开始发挥作用,将其设置为false。暂停按钮监控,然后在两个文本框中输入所需的击键。最后点击确定就大功告成了。

界面功能

public class UI : MonoBehaviour
{
    public GameObject  move;
    public GameObject jump;
    public InputHandel inputHandel;
    char[] moveButton;
    char[] jumpButton;
    //从文本框读取字母,并添加功能
    public void change()

unity 按键_unity安卓虚拟按键_unity实现组合按键

{ moveButton = move.GetComponent<InputField>().text.ToCharArray(); jumpButton = jump.GetComponent<InputField>().text.ToCharArray(); int i = (int)moveButton[0]; int j = (int)jumpButton[0]; if (i>=65 && i<=90) { i -= 65; } else { i -= 97; } if(j>=65 && j<=90) { j -= 65; } else { j -= 97; } //Debug.Log("i:" + i + "j:" + j); //将命令赋予对应的keys[i] for(int x=0; x<26; x++)

unity实现组合按键_unity安卓虚拟按键_unity 按键

{ if(x == i) { inputHandel.keys[i] = new MoveCommend(); } else if(x == j) { inputHandel.keys[j] = new JumpCommend(); } else { inputHandel.keys[x] = new NullCommend(); } } inputHandel.changeTime = true; } //暂定按钮响应 public void startChange() { inputHandel.changeTime = false; } }

1、 字符存储相应的字母。由于 ASCII 的限制unity 按键,只能绑定 AZ 的 26 个按钮。当然,大写和小写都可以识别。

2、 分配命令时,注意分配有用的功能。无用的按钮需要设置为空命令,否则会出现功能冲突。因为一开始都已经设置为空3D场景,所以不会报空错误。

结语

以上就是基于命令模式的unity角色切换和按键绑定的全部内容。第一次写这篇技术文章,不足之处还请见谅。

最后,为游戏设计模式推荐一波数据出处。再次感谢您的阅读。