RPG 游戏想必大家都不陌生。作为游戏类型中的一大分支,RPG 游戏通常需要玩家控制一个角色去探索剧情、与其他玩家互动、与 NPC 交流、猎杀怪物等。
而作为玩家 与游戏交互的输入系统,在整个游戏开发过程中,起着举足轻重的作用。
这篇文章,就将带着读者们,一起初步介绍病探索一下 unity 的输入系统。[文中使用的unity 版本为 2020.3.33,编辑器为 visual studio 2022]
目前 unity 中存在 2 套不同的输入系统,一直以来使用的默认输入系统,以及近几年推 出的 InputSystem。接下来将分别介绍这 2 种输入系统,并简单阐述优缺点。
本篇介绍重点
一、unity 默认输入系统的简介
unity 默认输入系统上手十分简单,对于没有复杂需求的情况下,使用起来非常方 便,也推荐初学者去使用。接下来我们来简单看一下,unity 默认输入系统是如何使用的
我们给 MainCamera 挂载一个 InputTest 脚本,在 InputTest 类的 Updaet 函数中添加 如下代码:

代码十分好理解,也很直观。Input.GetKeyDown()函数会去判断游戏运行时,用户是否摁下了某个按键。
传入的参数就如代码所示,当我们分别摁下 w/a/s/d 的时候就 会打印对应的日志。如下:

类似的我们可以通过
Input.GetMouseButtonDown(...) 获取鼠标事件;
Input.GetTouch(...)可以接收移动端的触屏事件;
Input.GetButtonDown(...)获取其他外设的输入。
如果我们想要实现摁下 wasd 操作物体移动,那么直接修改这里的 Debug.Log,改成自己实现的物体移动函数,就能够完成物体移动。
如果同学们对角色移动感兴趣,可以在添加助教老师微信咨询讨论,后续也会考虑专门针对移动出一篇详细的技能教程。这里主要介绍输入系统,就不再详细演示了。
Unity 这种默认输入系统优点很明显,使用方便、上手简单、也很直观。
不过在遇 到大项目时,也有比较显著的缺点。它会嵌套在每个控制文件中,导致项目耦合度高。遇见需要切换输入场景时(从角色控制切换到聊天输入),也需要自己去写代码控制。
因此,就出现了 InputSystem 这样一个,更符合大项目需求的低耦合、易于调试、 方便切换、跨平台、跨设备的输入系统,就诞生了。接下来,我们介绍一下 InputSystem的使用。
二、初探 InputSystem
1、安装
要安装 InputSystem,首先要找到菜单栏中的 Window->Package Manager,打开之后,找 到 InputSystem,点击 Install,完成安装。

随后会弹出对话框,询问你“是否用 InputSystem 来替换 unity 默认的输入系统”,我 们点击 Yes 即可。

随后等待 unity 重启后,就完成了 InputSystem 的安装。如果没有弹窗,也可以自行修 改项目设置,具体位置在 Edit -> Project Setting -> Player -> Other Setting -> Active Input Handling:

2、建立 InputActions
安装完之后,我们暂时还不能进行代码编写。我们需要先建立 InputActions 表。
在 Project文件夹中右键 create->Input Actions 创建一个对象,并重命名为 MyActions。

双击打开,我们可以看到下面这个界面:

我们点击 ActionMaps 右侧的加号按钮,添加两个输入控制表分别重命名为 PlayerMove和 UI,他们的作用是对于我们的输入进行分组。这样我们可以很方便的,将输入操作在玩 家移动和 UI 之间进行切换。

在中间一栏,点击 Actions 右侧加号按钮,添加我们自己的 Attack 和 Jump 动作:

我们目标是绑定给 Attack 和 Jump 绑定不同的按钮,并输出日志。接下来我们先点击Attack 旁边的加号,添加按钮绑定。
分别添加 a 和 s 按钮绑定这意味着当我们摁下 a 和s 的时候,都会触发 Attack 事件。同时,我们也为 Jump 绑定空格按钮。有 3 种方式可以绑 定。
第一种是直接选择 Path 中的按钮:

第二种,是在搜索栏中,搜索我们想要的按键。然后仔细筛选,就可以找到我们想要的 按键:

最后一种也是最推荐的方式。我们可以点击 Listen,此时它就会开始监听我们的操作。这时候,我们再摁一下我们想要的按键,系统就会自动显示对应的按钮。比如我们摁下D键:

到这里为止,我们就完成了角色移动的表配置,以及其按键绑定。我们需要将这张表生 成为我们能够使用的代码。我们在点击 Project 中 MyActions 表,在 Inspector 面板中就可以 看到这样的内容:

根据自己的喜好,修改合适的类名和命运空间,点击 apply 按钮,就可以自动生成我们想要的代码:
我们可以看到,在 Project 中就生成了一个代码文件。当然我们不需要去关心代码当中是什么样子的。
我们的目标是,学会如何使用它。
修改 InputTest 的代码,如下:

简单解释一下主要的代码:
第 7 行声明了 MyActions 变,并在函数中的第 11 行 new 了一下。
第 12 行和第 20 行,分别调用了 enable 和 disable 函数。这两个函数,通常要承兑的出现。
而最主要的输入响应函数,就是第 14 行和第 15 行。Performed 是一个委托,他在对应的按钮被摁下是,会激活 performed 委托。
因此我们给 performed 委托添加我们需要调用的 函数,来输出日志。运行一下,进行测试:

这篇文章,对 Unity 的 InputSystem 系统,进行了初步的探索和简单的介绍。在初步了 解了它的使用后,后续也将对 InputSystem 的使用进行更为深入的探索和更贴合实际项目的应用。
各位同学敬请关注!
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里编辑 3.解析依赖到项目中
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭11年前。Improvethisquestion我不经常使用ruby-通常它加起来相当于每两个月或更长时间编写一次脚本。我的大部分编程都是使用C++进行的,这与ruby有很大不同。由于我与ruby之间的差距如此之大,我总是忘记语言的基本方面(比如解析文本文件和其他简单的东西)。我想每天练习一些基本的东西,我想知道是否有一些我可以订阅的网站,并且会向我发送当天的Ruby问题或类似的东西。有人知道这样的站点/Internet服务吗?
前面一篇关于智能合约翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用程序语言去编写智能合约了。而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂智能合约代码,或找出其中的漏洞,那么,学习Solidity这门高级的智能合约语言是有必要的,当然,这都得在公链``````以太坊上,毕竟国内的联盟链有些是不兼容Solidity。Solidity是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下的账户行为的程序。Solidity是运行在以太坊(Ethereum)虚拟机(EVM)上,其语法受到了c++、python、javascript影响。Solidity是静态类型
写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c
三分钟集成Tap防沉迷SDK(Unity版)一、SDK介绍基于国家对上线所有游戏必须增加防沉迷功能的政策下,TapTap推出防沉迷SDK,供游戏开发者进行接入;允许未成年用户在周五、六、日以及法定节假日晚上8:00-9:00进行游戏,防沉谜时间段进入游戏会弹窗进行提示!开发环境要求:Unity2019.4或更高版本iOS10或更高版本Android5.0(APIlevel21)或更高版本🔗Unity集成Demo参考链接🔗UnityTapSDK功能体验APK下载链接二、集成前准备1.创建应用进入开发者后台,按照提示开始创建应用;2.开通服务在使用TDS实名认证和防沉迷服务之前,需要在上面创建的应
写在前面前两天学习并整理的大气散射基础知识:【Unity大气渲染】关于单次大气散射的理论知识,收获了很多,但不得不承认的是,这其实已经是最早的、90年代的非常古老的方法了,后来也出现了一些优化性的计算思路和方法。因此,我打算先不急着跟各种教程在Unity中实现大气散射,而是再花时间来看看最近的游戏是如何去实现大气渲染的:06.游戏中地形大气和云的渲染(下)|GAMES104-现代游戏引擎:从入门到实践接下来就跟着GAMES104讲地形大气和云渲染的部分学习并做简单的记录,涉及到之前没提到的Mie散射也只选择直接截图PPT的方式记录啦!毕竟对于做作品来说,之后实现出来才是重要的~当然,May佬的
所以我看到unity支持c#、JS和Boo。我可以学习其中一个,但我想制作一个“编译器”或类似的东西,让我可以编写ruby代码并输出JS代码或制作一个可以被Unity编译器读取的层。这有可能吗?我愿意在这方面投入很多时间并且有相当多的经验。 最佳答案 如果您的问题实际上是“我如何将Ruby编译为JavaScript”,那么这更容易回答:Opal:RubytoJavaScriptcompiler但是,学习其中一种受支持的语言会更好。当运行的是用另一种语言解释的代码时,很难调试“您的”代码。