美文网首页
实现自定义游戏键位

实现自定义游戏键位

作者: JervieQin | 来源:发表于2018-04-19 21:47 被阅读0次

最近与人组队制作demo参加完美世界游戏大赛,因为目标平台是PC,所以需要实现用户键位自定义功能。也是这个功能让我重新审视Event,EventSystem的妙用。


功能需求:
1.用户可以通过键盘按键自定义键位。
2.数据能够本地持久化

思路:
通过事件+PlayerPrefs实现。

实现:

  1. 搭建UI界面


    UI
  2. 挂接点击事件
 private void OnEnable()
    {
        for (int i = 0; i < KeyButtons.Length; i++)
            KeyButtons[i].onClick.AddListener(ClickInput);
    }
//记录输入设置
    void ClickInput()
    {
        currentKey = EventSystem.current.currentSelectedGameObject;      //获取选中对象
        EventSystem.current.currentSelectedGameObject.GetComponent<Image>().color = selectColor;  //选中后改变颜色
    }
  1. 初始化键位
void InitializeInputKey()
    {
        if (PlayerPrefs.HasKey("up"))
            return;
        PlayerPrefs.SetString("up", KeyCode.W.ToString());
        PlayerPrefs.SetString("down", KeyCode.S.ToString());
        PlayerPrefs.SetString("left", KeyCode.A.ToString());
        PlayerPrefs.SetString("right", KeyCode.D.ToString());
        PlayerPrefs.SetString("jump", KeyCode.J.ToString());
        PlayerPrefs.SetString("hat", KeyCode.L.ToString());
        PlayerPrefs.SetString("attack", KeyCode.K.ToString());
    }
  1. Button上显示当前键位
 //获取当前键位设置并显示在按钮上
    void GetInput()
    {
        string name = "";
        for (int i = 0; i < inputBtnstxt.Length; i++)
        {
            name = inputBtnstxt[i].name;
            KeyButtons[i].transform.GetChild(0).GetComponent<Text>().text = PlayerPrefs.GetString(name).ToString();
        }
    }
  1. 获取点击事件对象
 private void OnGUI()
    {
        if (currentKey != null)
        {
            Event e = Event.current;
            if (e.isKey)
            {
                PlayerPrefs.SetString(currentKey.name, e.keyCode.ToString());
                currentKey.transform.GetChild(0).GetComponent<Text>().text = e.keyCode.ToString();
                currentKey.GetComponent<Image>().color = diselectColor;
                currentKey = null;
            }
        }
    }
  1. 调用
 private void Update()
    {
        if (Input.GetKeyDown(InputDown("jump")))
            Debug.Log("Jump!!");
    }
  KeyCode InputDown(string inputKey)
    {
        return (KeyCode)System.Enum.Parse(typeof(KeyCode), PlayerPrefs.GetString(inputKey));
    }

相关文章

  • 实现自定义游戏键位

    最近与人组队制作demo参加完美世界游戏大赛,因为目标平台是PC,所以需要实现用户键位自定义功能。也是这个功能让我...

  • StarCitizen星际公民3.0菜单、键位图文汉化

    1.游戏设置 2.图像 3.键位绑定 ON FOOT(步行模式) FLGHT(飞行模式) 4.键位设置

  • vue API

    一、全局配置 1. keyCodes给 v-on 自定义键位别名。用法: 二、全局API 1. Vue.exten...

  • 刺激战场国际服辅助哪里有的

    和平精英四指操作的键位怎么设置更好用?在使用四指操作的时候,大家一定要设置好键位,这样才能不影响游戏的体验,四指操...

  • 和平精英辅助哪里下载有的卖吗

    和平精英四指操作的键位怎么设置更好用?在使用四指操作的时候,大家一定要设置好键位,这样才能不影响游戏的体验,四指操...

  • 01导航页面

    1.功能描述 键位上显示对应网站的图标及键位,输入键盘键位打开相应网站,点击键位可修改键盘键位所对应的网站。 2....

  • Vue 自定义键位别名

    当我们使用键盘键位来触发事件的时候,在vue 1.0版本的时候,英文 a-z 26个英文字母都是可以实现的,但在v...

  • Android 滑动改变头部透明度

    ScrollView 自定义滑动监听 调用 透明度设置 备注:代码比较完整,关键位置都有注释,就不做过多的解释。

  • phaser Canvas 游戏界面截图

    需求 保存phaser自定义游戏关卡 实现 截图(base64)、关卡数据、关卡描述都用表格提交给后台 问题 奶奶...

  • 通过原型链实现数组内置方法[JavaScript_013]

    push()实现 unshift()实现 reverse()实现 sort()自定义排序方法 规则:自定义的排序方...

网友评论

      本文标题:实现自定义游戏键位

      本文链接:https://www.haomeiwen.com/subject/utpgkftx.html