unity实现按键自定义
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();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
其中用到了一些接口 我给出我之前写的一篇博文帮助大家理解
博文地址
其实里边的东西也比较好懂
如果想要初始化按键的话 因为代码里边是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("向右");
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
然后我们把上述的脚本添加到unity中即可实现我们想要的效果
具体的使用方法 我就不再详细赘述了 如果大家还有不明白的地方 可以补充一些基础知识 或者是私信我
希望以上所写对大家有所帮助
————————————————
版权声明:本文为CSDN博主「头号理想」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44302602/article/details/116568463