Unity支持手柄的控制,效果图如下所示:
这是一篇针对手柄控制U3D入门的过程记载,主要以实现功能为目的,分四个部分进行过程展示:
Input System包的下载
设备的查找
Input Actions控件的使用
主要代码的解释及编写
这里也将我使用过程中遇到的问题和解决方法也用红字进行标注,希望能帮到遇到类似问题的朋友。
一 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()函数里进行更新文章来源:https://www.toymoban.com/news/detail-447638.html
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);
}
现在,就可以拿起手柄实现文章开头的控制效果啦。文章来源地址https://www.toymoban.com/news/detail-447638.html
到了这里,关于使用手柄控制Unity及效果展示(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!