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

实现自定义游戏键位

作者: 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));
        }
    

    相关文章

      网友评论

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

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