使用手柄控制Unity及效果展示(1)
Unity支持手柄的控制,效果图如下所示:
![](/assets/blank.gif)
![](/assets/blank.gif)
这是一篇针对手柄控制U3D入门的过程记载,主要以实现功能为目的,分四个部分进行过程展示:
Input System包的下载
设备的查找
Input Actions控件的使用
主要代码的解释及编写
这里也将我使用过程中遇到的问题和解决方法也用红字进行标注,希望能帮到遇到类似问题的朋友。
一 Input System的下载
这里,我用的Unity是2020.3.29版本的。进入Unity自创一个项目后,单击菜单栏Window-Package Manager,如下图1所示,在左上角“Packages”中单击”Unity Registry“选项,在搜索栏中输入”Input System“包进行下载,如图2所示。该包下载完毕后,会有弹窗出来选择”Yes“重启Unity,重启后包就已安装到此项目中。
![](/assets/blank.gif)
图1
![](/assets/blank.gif)
图2
二 设备的查找
将手柄连接到电脑上,我们可以通过"Win-设置-设备-蓝牙和其他设备”中查看手柄是否连接成功,如图3所示。
![](/assets/blank.gif)
图3
也可以在Unity里菜单栏点击“Window-Analysis-Input Debugger”,如下图4所示。在Input Debug里的Devices里可以看到手柄是否连接成功,若有,则会在Devices里显示出来,双击手柄设备,则可以测试各个键及摇杆的情况,如图5所示。
![](/assets/blank.gif)
图4
![](/assets/blank.gif)
![](/assets/blank.gif)
图5
三 Input Actions的使用
在Project里选择Create选项中的input Actions选项,给其重命名为”Player Controls“,称其为播放器控件,我们可以在里面加上动画动作。在Action Maps里新建项目,重命名为”GamePlay“,在其对应的”Actions“里对应的动作重命名为”Grow“,在后面下拉箭头选择”Add Binding“,在其后面菜单栏里”Binding Properties“中的”Binding“选项里的”Path“进行选择,如图6所示,在Joystick里选择,或者直接用Listen,通过对手柄的控制来选择对键位的操纵,如图7所示。
![](/assets/blank.gif)
图6
![](/assets/blank.gif)
图7
在这一过程中,可能会遇到如图8所示,”Left Stick“、”Right Stick“这两个左右摇杆为灰色不能选中的情况,此时,单击如图9所示的”path“后的”T“按钮,将其变为输入模式,若想用”Left Stick“,可以先用”Listen“功能读取”<Gamepad>/leftStick/down“,然后将”/down“删掉即可。
![](/assets/blank.gif)
图8
![](/assets/blank.gif)
图9
在所有选择完毕后,双击”Player Controls“,如图10所示,将Generate C# Class选项勾选,选择Apply应用即可。
![](/assets/blank.gif)
图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所示。
![](/assets/blank.gif)
图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);}
现在,就可以拿起手柄实现文章开头的控制效果啦。
使用手柄控制Unity及效果展示(1)相关推荐
- [cesium] 数字孪生 | 超图 | UE4 | Unity | 基于三维GIS + 游戏引擎结合示例 | UE4 和 Unity的效果展示
说明 因为公司的产品规划,最近在研究数字孪生方向的产品,看到51word的云渲染路线三维GIS+游戏引擎跨界融合: 不过没多久看到超图官网已经出了相应的拓展插件今天准备试试.之前有关注过cesium有 ...
- Unity 图片 涂抹/擦除/刮刮乐 效果展示 包含 Sprite, Image, Mesh的涂抹效果
Unity 2D图片 涂抹/擦除/刮刮乐 效果展示 包含 Sprite, Image, Mesh的涂抹效果 参数 progressText: 显示百分比的文本 maskImg: 需要擦除的图片 bru ...
- Unity 3D模型展示之模型透明效果
效果展示 1.透明效果实现思路 简单点就是将模型的材质替换成透明材质.需要注意:1.指定范围内的模型进行透明化.2.一个模型会有多个材质,都需要进行透明化.3.还能将模型的材质恢复最初的效果.4.选中 ...
- Unity 3D模型展示框架篇之自由观察(Cinemachine)
本项目将整合之前Unity程序基础小框架专栏在Unity 3D模型展示项目基础上进行整合,并记录了集成过程中对原脚本的调整过程.增加了Asset Bundle+ILRuntime热更新技术流程. 在U ...
- Unity 3D模型展示之webGL平台展现
在之前的项目基础上我们已经打包后在PC端进行展示了.这篇文章主要介绍在切换到webGL上时效果展示不出来需要进行调整,特此记录一下. 1.平台切换 选择WebGL平台切换,没有的可以进行安装,安装之后 ...
- Unity 3D模型展示之UI布局
整体布局情况 导入UI资源并统一将Texture Type设置为Sprite(2D and UI) 1.标题 将Text中的文本设置为'Unity 3D物体展示实例'. 添加Shadow与Outlin ...
- Unity 3D模型展示框架篇之框架运用
本项目将整合之前Unity程序基础小框架专栏在Unity 3D模型展示项目基础上进行整合,并记录了集成过程中对原脚本的调整过程.增加了Asset Bundle+ILRuntime热更新技术流程. 效果 ...
- Selenium之运行效果展示
Selenium之运行效果展示 接下来主要学习selenium自动化测试框架在爬虫中的应用,selenium能够大幅降低爬虫的编写难度,但是也同样会大幅降低爬虫的爬取速度.(selenium可用于爬虫 ...
- Unity镜子效果的实现(无需镜子Shader)
Unity镜子效果制作教程 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...
最新文章
- 任意多相机系统的SLAM重设计
- srs 配置http flv集群
- Zepto 与 jQuery 的区别 小结
- 解决Mono for android的xml编辑器无法代码完成的问题
- 小明利用计算机软件绘制函数,2019年人大附中初二下期末模拟数学试题
- NeHe OpenGL第二十五课:变形
- 存储高手速成:推荐10个存储技术网站和论坛
- ECharts之force力导向布局图——数据源说明及后端API约定
- sessionStorage第一次进入页面显示弹窗
- 25个很酷的jQuery倒计时脚本–添加动态计数器!
- wget 下载网站所有文件
- 阿里巴巴2018秋招面经之前端岗(1~5面)
- 【JAVA】顺序表与ArrayList
- laravel-admin Model does not exists添加模型报错
- 撩小姐姐的小程序(二)----旋转3D八音盒
- oppo禁用android系统通知栏,状态栏设置OPPO版
- element el-upload 一次上传单张/多张图片(多选)
- 计算机网络mac地址作用是什么,mac地址的作用是什么
- ES6语法——for...in..以及字符串新增操作
- 标准化金额:加小数点和逗号 / 加逗号 / 加小数点 / 纯数字
热门文章
- 学习大数据的第29天——Linux指令的学习以及一些面试题
- win10和centos7双系统卸载centos7后遇到的问题
- 时间序列深度学习:状态 LSTM 模型预测太阳黑子
- 编队控制主要控制方法
- 网络工程毕业设计 SSM停车位短租系统(源码+论文)
- 多巴胺对于情绪的影响 理智与感性
- ubuntu 紧急模式
- 是在人和计算机对话过程中,( )是在人和计算机对话过程中以人机交换方式辅助决策者探求可能的方案,生成管理者决策所需要的信息...
- 顾家家居荣获“工业产品绿色设计示范企业”
- MobaXterm配置与使用