使用手柄控制Unity及效果展示(1)

Unity支持手柄的控制,效果图如下所示:

这是一篇针对手柄控制U3D入门的过程记载,主要以实现功能为目的,分四个部分进行过程展示:

  1. Input System包的下载

  1. 设备的查找

  1. Input Actions控件的使用

  1. 主要代码的解释及编写

这里也将我使用过程中遇到的问题和解决方法也用红字进行标注,希望能帮到遇到类似问题的朋友。

一 Input System的下载

这里,我用的Unity是2020.3.29版本的。进入Unity自创一个项目后,单击菜单栏Window-Package Manager,如下图1所示,在左上角“Packages”中单击”Unity Registry“选项,在搜索栏中输入”Input System“包进行下载,如图2所示。该包下载完毕后,会有弹窗出来选择”Yes“重启Unity,重启后包就已安装到此项目中。

图1

图2

二 设备的查找

将手柄连接到电脑上,我们可以通过"Win-设置-设备-蓝牙和其他设备”中查看手柄是否连接成功,如图3所示。

图3

也可以在Unity里菜单栏点击“Window-Analysis-Input Debugger”,如下图4所示。在Input Debug里的Devices里可以看到手柄是否连接成功,若有,则会在Devices里显示出来,双击手柄设备,则可以测试各个键及摇杆的情况,如图5所示。

图4

图5

三 Input Actions的使用

在Project里选择Create选项中的input Actions选项,给其重命名为”Player Controls“,称其为播放器控件,我们可以在里面加上动画动作。在Action Maps里新建项目,重命名为”GamePlay“,在其对应的”Actions“里对应的动作重命名为”Grow“,在后面下拉箭头选择”Add Binding“,在其后面菜单栏里”Binding Properties“中的”Binding“选项里的”Path“进行选择,如图6所示,在Joystick里选择,或者直接用Listen,通过对手柄的控制来选择对键位的操纵,如图7所示。

图6

图7

在这一过程中,可能会遇到如图8所示,”Left Stick“、”Right Stick“这两个左右摇杆为灰色不能选中的情况,此时,单击如图9所示的”path“后的”T“按钮,将其变为输入模式,若想用”Left Stick“,可以先用”Listen“功能读取”<Gamepad>/leftStick/down“,然后将”/down“删掉即可。

图8

图9

在所有选择完毕后,双击”Player Controls“,如图10所示,将Generate C# Class选项勾选,选择Apply应用即可。

图10

四 主要代码的解释及编写

新建一个C#脚本绑定到新建立方体Cube上,进行简单地编写来实现对Cube的控制,这里以控制Cube的LocalScale为例,代码如下,引用添加”using UnityEngine.InputSystem“

PlayerControls controls;

    void Awake()
    {
        controls = new PlayerControls();
        controls.Gameplay.Grow.performed += ctx => Grow();
    }

    void Grow()
    {
        transform.localScale *= 1.5f;
    }

    void OnEnable()
    {
        controls.Gameplay.Enable();
    }
    void OnDisable()
    {
        controls.Gameplay.Disable();
    }

当然,这仅仅只是控制立方体的变大,也可以用类似操作,使其变小。

若想用摇杆控制控制Cube的移动和旋转,则可以按照步骤三中,在”Actions“里添加新动作,重命名为”Move“和”Rotate“,其对应的绑定操作可以按步骤三中红色的注意事项进行,这里展示下我绑定完后的界面,如图11所示。

图11

 Vector2 move;
 Vector2 rotate;
    void Awake()
    {
        controls = new PlayerControls();
        controls.Gameplay.Grow.performed += ctx => Grow();
        controls.Gameplay.Reduce.performed += ctx => Reduce();
        controls.Gameplay.Move.performed += ctx => move = ctx.ReadValue<Vector2>();
        controls.Gameplay.Move.canceled += ctx => move = Vector2.zero;
        controls.Gameplay.Rotate.performed+=ctx =>rotate = ctx.ReadValue<Vector2>();
        controls.Gameplay.Rotate.canceled += ctx => rotate = Vector2.zero;
    }

由于实时控制摇杆,我们在Update()函数里进行更新

   private void Update()
    {
        Vector2 m = new Vector2(move.x, move.y) * 1.5f * Time.deltaTime;
        transform.Translate(m, Space.World);

        Vector2 r = new Vector2(rotate.y, -rotate.x) * 120f * Time.deltaTime;
        transform.Rotate(r,Space.World);
    }

现在,就可以拿起手柄实现文章开头的控制效果啦。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>