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