unity实现按键自定义

Posted 头号理想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity实现按键自定义相关的知识,希望对你有一定的参考价值。

好久没有更新了 大概一个月了吧 然后最近休息了几天 完了一款游戏 里边的按键自定义我感觉挺有意思的
就用unity实现一下,我大致搜了一下 csdn上包括百度都很少有这样完整的demo
所以这篇博文我做一个稍微完整的demo给大家参考

简单场景搭建

我这里搭建一个最简单的场景 只为说明问题
在这里插入图片描述

首先我简单介绍一下使用操作方法
我们鼠标点击相应键位之后,即可通过键盘的按键改变键值
一旦鼠标的指针移出到按钮的范围之内,再按键盘就不起作用了
我这里采用面相对象的思想 每个按钮都添加一个自己本身的脚本

下面我先给出源码

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;


public class Mybutton : MonoBehaviour, IPointerExitHandler, IPointerClickHandler
{
    public KeyCode curinput = KeyCode.None;
    public Text Desplaytext;

    public Text tip;//提示

    bool isstart = false;//当前是否是修改状态

    private void Awake()
    {
        tip.enabled = false;
    }

    public void OnPointerClick(PointerEventData eventData)//按下按钮
    {
        isstart = true;
       
    }
    public void OnPointerExit(PointerEventData eventData)//鼠标移出按钮
    {
        isstart = false;
    }

    private void Update()
    {
        if (isstart)
        {
            tip.enabled =true ;
            if (Input.anyKeyDown)//检测到按键或者鼠标
            {
                foreach (KeyCode keyCode in Enum.GetValues(typeof(KeyCode)))
                {
                    if (Input.GetMouseButton(0)|| Input.GetMouseButton(1) || Input.GetMouseButton(2))
                    {
                        continue;//去除鼠标按键的影响
                    }
                    if (Input.GetKeyDown(keyCode))
                    {
                        curinput = keyCode;//按下的按钮
                    }
                }
            }
        }
        else
        {
            tip.enabled = false;
        }
        Desplaytext.text = curinput.ToString();
    }

   
}

其中用到了一些接口 我给出我之前写的一篇博文帮助大家理解
博文地址

其实里边的东西也比较好懂
如果想要初始化按键的话 因为代码里边是public类型的 所以在unity中可以很简单初始化
但是上边我们仅仅做到了使得文本得到变换 我们真正要实现的效果还没有实现
因为我们希望我们修改键值之后,按下我们修改之后的键值之后,产生我们想要对应的效果
比如wasd的前后左右的移动等等
所以我们还需要一个管理所有按钮的类

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MybuttonManager : MonoBehaviour
{
    private KeyCode ForwardButton ;//向前
    public GameObject forward;//放置脚本的按钮

    private KeyCode BackButton;
    public GameObject back;

    private KeyCode LeftButton;
    public GameObject left;

    private KeyCode RightButton;
    public GameObject right;
    private void Update()
    {
        ForwardButton = forward.GetComponent<Mybutton>().curinput;//每帧同步按键实际键值与当前修改的键值
        BackButton = back.GetComponent<Mybutton>().curinput;
        LeftButton = left.GetComponent<Mybutton>().curinput;
        RightButton = right.GetComponent<Mybutton>().curinput;

        if (Input.GetKeyDown(ForwardButton))//实现按键的响应效果
        {
            Debug.LogError("前进");
        }
        if (Input.GetKeyDown(BackButton))
        {
            Debug.LogError("后退");
        }
        if (Input.GetKeyDown(LeftButton))
        {
            Debug.LogError("向左");
        }
        if (Input.GetKeyDown(RightButton))
        {
            Debug.LogError("向右");
        }
    }
}

然后我们把上述的脚本添加到unity中即可实现我们想要的效果
具体的使用方法 我就不再详细赘述了 如果大家还有不明白的地方 可以补充一些基础知识 或者是私信我

希望以上所写对大家有所帮助

以上是关于unity实现按键自定义的主要内容,如果未能解决你的问题,请参考以下文章

Unity 3D 游戏通用系统设置页面,自定义按键设置,背景虚化,图像设置,亮度对比度饱和度音量调节,分辨率窗口化,帧率垂直同步,抗锯齿,阴影质量,纹理质量设置

unityevent与持续按键触发

Unity怎样实现点击按钮 等于按下某个按键? 在线等!

unity 通过Button按键实现复制粘贴功能的脚本代码

利用按键精灵在PC端实现自定义随机点击功能

利用按键精灵在PC端实现自定义随机点击功能