Unity游戏中的键位设置(下)

上一篇Unity游戏中的键位设置(上)我们简单的说了一下如何识别输入的问题,解决了获取输入键位和判断按钮问题,接下来我们就要解决剩下的问题了。

修改按键和保存按键

修改按键其实涉及到两个东西,一个是显示的内容,一个是内部数据,所以我们要通过这一个小小的按钮去实现这两个事件。
这是我用的方法

	EventSystem eventsystem;//事件系统 

    [Tooltip("需要被射线检测的Canvas")]
    public GraphicRaycaster RaycastInCanvas;

    string KeyName = "";//当前键位的名称

    public GameObject[] Keys; //键位对象
    GameObject TemporaryObject; //临时对象

    bool IsInputKey = false;//是否输入键位
    bool Isprogress = false;//是否正在输入
    bool IsStart = false;//开始计时

public void ClickButtonKey()//按钮事件
    {
        //是否正在输入
        if (!Isprogress)
        {
            //进行了修改
            IsEdit = true;
            //正在输入
            Isprogress = true;
            //得到点击对象名称
            CheckGuiRaycastObjects(out KeyName);

            //得到对象
            for (int i = 0; i < Keys.Length; i++)
            {
                if (Keys[i].name == KeyName)
                {
                    TemporaryObject = Keys[i];
                }
            }

            //清空对象文本
            TemporaryObject.GetComponent<Text>().text = "";

            //执行输入
            IsInputKey = true;
        }
    }

处理完前期工作我们就开始执行输入,不在这个方法执行输入,主要原因就是因为只有OnGUI能获得键盘输入,所以剩下的工作都放在OnGUI函数中去执行。

private void OnGUI()
    {
        if (IsInputKey)
        {
            //临时存储值
            int TemporaryNum;
            //得到键值
            KeyCode TemporaryKey = Event.current.keyCode;

            if (Input.GetKeyDown(KeyCode.Mouse0))
            {
                TemporaryKey = KeyCode.Mouse0;
            }
            else if (Input.GetKeyDown(KeyCode.Mouse1))
            {
                TemporaryKey = KeyCode.Mouse1;
            }
            else if (Input.GetKeyDown(KeyCode.Mouse2))
            {
                TemporaryKey = KeyCode.Mouse2;
            }

            //判断是否为空
            if (TemporaryKey != KeyCode.None)
            {
                //转换成数字用于储存
                TemporaryNum = (int)TemporaryKey;
                //显示
                TemporaryObject.GetComponent<Text>().text = TemporaryKey.ToString();
                //更改
                EditData.Key[KeyName] = TemporaryNum;
                //开始计时
                IsStart = true;
            }
            //暂停时间计算

            if (IsStart)
            {
                StopTime -= Time.deltaTime;
                if (StopTime <= 0)
                {
                    //停止计时
                    IsStart = false;
                    //关闭输入
                    IsInputKey = false;
                    //结束输入
                    Isprogress = false;
                    //恢复暂停时间
                    StopTime = 0.3f;
                }
            }
        }

    }

这里是我在OnGui中执行的后续步骤,因为通过Event.current.keyCode是无法获取鼠标的输入,所以单独的进行鼠标判定。

中间的计时器是为了避免因GUI更新的速度太快导致鼠标左键无法录入的问题而设置的。

保存的部分就是EditData.Key[KeyName] = TemporaryNum;这里直接修改了键位的数据。
这个EditData是我的键位数据脚本,你们也可以用其他方法去存储这个数据。

调用键位

最后就是如何调用键位了,这个就不用多说了其他需要键位的脚本通过调用EditData里面的数据去使用,这里我就不多赘述。

总结

我们解决了鼠标检测问题,获取按钮和按钮判定问题,键位修改和保存问题,这一套方法可以解决大部分游戏的键位设置问题,希望可以给刚入门的同学带来一点收获。

后记

自从看了虚幻5的演示视频后,实在是太兴奋了,可能以后我就转向了UE了,不过Unity我还是不会扔的,毕竟Unity不太吃配置,UE到时候电脑要更新到RTX2070以上,才能达到演示视频的流畅称度,所以,“奔涌吧,Unity”(手动滑稽)

你可能感兴趣的:(Unity经验分享)