阅读 205

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


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐