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);}

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

使用手柄控制Unity及效果展示(1)相关推荐

  1. [cesium] 数字孪生 | 超图 | UE4 | Unity | 基于三维GIS + 游戏引擎结合示例 | UE4 和 Unity的效果展示

    说明 因为公司的产品规划,最近在研究数字孪生方向的产品,看到51word的云渲染路线三维GIS+游戏引擎跨界融合: 不过没多久看到超图官网已经出了相应的拓展插件今天准备试试.之前有关注过cesium有 ...

  2. Unity 图片 涂抹/擦除/刮刮乐 效果展示 包含 Sprite, Image, Mesh的涂抹效果

    Unity 2D图片 涂抹/擦除/刮刮乐 效果展示 包含 Sprite, Image, Mesh的涂抹效果 参数 progressText: 显示百分比的文本 maskImg: 需要擦除的图片 bru ...

  3. Unity 3D模型展示之模型透明效果

    效果展示 1.透明效果实现思路 简单点就是将模型的材质替换成透明材质.需要注意:1.指定范围内的模型进行透明化.2.一个模型会有多个材质,都需要进行透明化.3.还能将模型的材质恢复最初的效果.4.选中 ...

  4. Unity 3D模型展示框架篇之自由观察(Cinemachine)

    本项目将整合之前Unity程序基础小框架专栏在Unity 3D模型展示项目基础上进行整合,并记录了集成过程中对原脚本的调整过程.增加了Asset Bundle+ILRuntime热更新技术流程. 在U ...

  5. Unity 3D模型展示之webGL平台展现

    在之前的项目基础上我们已经打包后在PC端进行展示了.这篇文章主要介绍在切换到webGL上时效果展示不出来需要进行调整,特此记录一下. 1.平台切换 选择WebGL平台切换,没有的可以进行安装,安装之后 ...

  6. Unity 3D模型展示之UI布局

    整体布局情况 导入UI资源并统一将Texture Type设置为Sprite(2D and UI) 1.标题 将Text中的文本设置为'Unity 3D物体展示实例'. 添加Shadow与Outlin ...

  7. Unity 3D模型展示框架篇之框架运用

    本项目将整合之前Unity程序基础小框架专栏在Unity 3D模型展示项目基础上进行整合,并记录了集成过程中对原脚本的调整过程.增加了Asset Bundle+ILRuntime热更新技术流程. 效果 ...

  8. Selenium之运行效果展示

    Selenium之运行效果展示 接下来主要学习selenium自动化测试框架在爬虫中的应用,selenium能够大幅降低爬虫的编写难度,但是也同样会大幅降低爬虫的爬取速度.(selenium可用于爬虫 ...

  9. Unity镜子效果的实现(无需镜子Shader)

    Unity镜子效果制作教程 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...

最新文章

  1. Activity(3、启动模式)
  2. 【408预推免复习】操作系统之IO层次结构和IO控制方式
  3. php 中curd表达啥,CURD语句的基本语法和PDO中操作数据表的基本步骤实例演示增删改查命令 2019年07月24日 23时10分...
  4. 基于vue的颜色选择器vue-color-picker
  5. CNN训练注意事项与框架使用
  6. wxWidgets:wxRichTextHTMLHandler 类用法
  7. android文件系统管理
  8. 服务器如何查看gpu型号,linux 查看服务器gpu
  9. Hive2.1.1、Hadoop2.7.3 部署
  10. nhibernate学习之集合组合依赖
  11. 通过NavMeshObstacle解决NavMesh防卡
  12. 怎么知道他人的 IP
  13. SAVIOR Securing Autonomous Vehicles with Robust Physical Invariants 论文报告
  14. MD5算法原理及代码实现
  15. linux kernel 摄像头驱动
  16. AngularJs checkbox绑定
  17. Windows Server 2008 R2 安装及配置
  18. 拓嘉启远:拼多多购物运输中的商品能拒收吗
  19. 【Unity3D实战】零基础一步一步教你制作酷跑类游戏(1)
  20. 通过浏览器UA获取设备信息

热门文章

  1. 深度学习入门笔记之ALexNet网络
  2. 上海电气和Bentley软件拉升合作挡位 提速奔赴零碳目标
  3. 计算机毕业设计node.js+vue在线日程管理系统
  4. 基于STM32单片机窗帘窗户晾衣架雨滴光照检测控制系统电子代
  5. Java时间工具类(把日期时间转换成xx秒前、xx分钟前、xx小时前...)
  6. 数据分析 - 哪些产品可以作为引流产品?/如何通过数据快速识别引流产品?(1)
  7. 程序员面试最反感的这件事,很多公司都会做
  8. 虚拟数字人厂商内卷元宇宙
  9. 2021年平凉市五中高考成绩查询,平凉五中举行2022届学生高考动员誓师大会
  10. 数控服务器显示A49,广州数控系统伺服驱动故障的分析