Godot游戏如何提升触感体验

news2024/9/21 11:02:36

在游戏世界中,触感体验至关重要,既能极大提升玩家沉浸感,让其深度融入游戏,在操作角色或与环境互动时,通过触感反馈获得身临其境的真实感(比如动作游戏中角色攻击或受击时的振动反馈,能使玩家更直观感受战斗的激烈程度),增加紧张刺激感且让玩家更投入;也能增强游戏互动性,玩家通过触摸屏幕或手柄感受游戏元素,提高参与积极性、趣味性与可玩性。

我们换个角度,从游戏开发侧看,规模稍大的游戏都离不开游戏引擎的支持。除了广为人知的 Unreal Engine(虚幻引擎)和 Unity 外,还有一款名为 Godot 的游戏引擎——它是一款完全免费且开源的游戏引擎,其优势在于对 2D 游戏的支持(像土豆兄弟、苦痛殿堂、穹顶守护者等游戏都是基于 Godot 开发的)。尽管 Godot 也具备一定的 3D 渲染能力,但与一些成熟的商业 3D 游戏引擎(如 Unity、Unreal Engine)相比,在性能和功能方面可能稍显不足。然而在 2D 游戏开发领域,Godot 的表现相当出色,它能够高效地处理大量 2D 物体的渲染,对于像割草类这种需要大量 2D 元素的游戏而言,是个极佳的选择。

那么,Godot 游戏引擎是如何支持触感体验的呢?实际上,关于触感这块功能,Godot 仅仅提供了3个API:

 #启动手柄振动,弱电机强度weak_magnitude,强电机强度strong_magnitude,持续时间duration
 void start_joy_vibration(device: int, weak_magnitude: float, strong_magnitude: float, duration: float = 0)
 #停止手柄振动
 void stop_joy_vibration(device: int)
 #振动手持设备(VR手柄)
 void vibrate_handheld(duration_ms: int = 500)

Godot 原生 API 的优点在于,调用参数简单,易于使用。通过调整电机强度和持续时间,可以轻松实现基本的振动效果。然而,它的缺点也很明显:振动效果比较单一,无法实现变频和动态控制,调试过程复杂。这使得许多开发者往往仅将其用于简单的提示场景。

为了弥补 Godot 原生系统在触感支持方面的短板,我们把 RichTap 封装成了插件,把高品质触感体验带进了Godot游戏世界。RichTap 是瑞声科技推出的全品类触感方案。它在触觉反馈方面极为丰富,能为智能设备提供细腻且多样的振动效果。在兼容性上,RichTap 支持 Android、iOS、Windows、Mac 等多种操作系统和平台,实现一次集成多端适配。其应用领域十分广泛,已在多款游戏大作里落地。

下面是我们封装的RichtapPlayer Godot插件的简单引用:

类似于系统AudioStreamPlayer,我们创建一个RichtapPlayer节点,并添加相应的HE资源(使用RichTap Creator Pro工具软件生成的振动效果描述文件)即可使用。

RichtapPlayer插件的一个显著优点是,允许用户根据需求定制振动效果,以实现更贴合具体游戏场景的触觉体验。此外,使用RichTap Creator Pro的可视化界面可以轻松创建出复杂的振动效果,使设计师更容易完成设计,也使振动设计与游戏控制代码解耦,提升游戏开发的整体效率。在Godot编辑器中,程序员只需引入HE资源,使用RichtapPlayer节点播放就能轻松表现丰富的振动效果。另一个优点是,振动效果调试变得非常便捷,无需运行整个项目即可体验配置好的振动效果,像播放音效一样简单。

下面,我们结合一个实际的游戏项目,来演练一下RichTap Godot插件的集成与使用。我们在GitHub找到一款“人鱼大战”游戏。这款游戏的玩法是,玩家通过连接两个手柄,控制各自的人鱼,尽快捡到武器后,使用武器将对方击倒为胜。我们选择它的原因在于,它是一款支持手柄的双人对战游戏,且游戏原作不支持触感,挺适合让RichTap来一展身手的。

游戏中,我们可以充分利用触觉反馈来提升玩家体验,玩家可以感受到各自独特的拟真触觉反馈,如跳跃、挥刀、获取武器,触感的加入使得每次行动都有“掷地有声”的确认感,“无声胜有声”的效果传递着精准、直观的信息。

例如,在射击时,有子弹射出和空枪的反馈也会有所不同,子弹成功射出时,干脆、带一些颗粒感的触感可以体现开枪的后坐力和冲击感,击中对象后还有明显的撞击感来模拟真实的射击场景,空枪则是用较弱较闷的效果体现哑炮,使两种射击状态产生差异。拟真效果不同于普通的触觉反馈,不仅不会干扰游戏体验,还会大幅提升玩家的“爽感”,在丰富体验效果的同时,帮助玩家识别角色状况。此外,触感设计时还考虑到双方玩家体验的差异性:当一方击倒对手时,双方玩家会收到不同的效果,一方是快速且有金属质感地“挥刀”,一方是被击中的“倒地”和“能量喷溅”,不同的效果烘托着赢家的成就感和被打败的壮烈氛围,有趣且恰如其分的触觉效果会进一步增强游戏的沉浸感,不仅增添了游戏的趣味性,还能够让玩家更直观地感受到游戏中的动作与互动。

终于来到了 “Talk is cheap. Show me the code” 时刻。具体的集成步骤如下:

1. 将 RichTap 插件文件复制到游戏项目的 res://addons 文件夹下(如果该文件夹不存在,请先手动创建)。然后打开项目设置,切换到“插件”页,找到 RichtapPlugin 并勾选它以启用插件,如果在场景中搜索到节点RichtapPlayer,即表示插件集成成功。

2. 将设计师创建的各种HE文件导入到文件夹 assets\haptics 中(可根据个人习惯进行调整)。

3. 比如想给人鱼“拾取武器”添加一个振动效果,则先创建一个名为“Haptic”的父节点,然后在该节点下创建一个RichtapPlayer子节点,并将其重命名为“Pickup”。接着,选择pickup.he文件并将其拖动到RichtapPlayer节点的Source Clip属性中(其他效果可以按照相同方式操作)。

4. 在父节点中创建一个脚本,根据传入的游戏事件名称判断需要播放哪个RichtapPlayer节点。因为RichTap管理着多个手柄,需要通过index参数来指定让哪个手柄振动。(默认情况下,第一个连接的手柄索引为0,第二个连接的手柄索引为1)。

5. 在所有效果配置完成后,你只需在合适的地方调用play方法,即可表现相应的振动效果了。具体在哪一行最合适呢?有个小技巧,先找到播放音效的sounds.play(...),在它的下面一行添加振动就可以了!

RichTap 插件以及完整的项目代码可以从这里获取:https://github.com/RichTapHaptics/fishgame-godot。赶紧试试效果吧!

通过上面的演示,我们已经学会了如何给一个 Godot 游戏添加触感功能。如果你恰好正在开发自己的 Godot 游戏,不妨试试我们的 RichTap 插件吧。我们相信,随着技术的不断进步,Godot 游戏的触感体验在未来有着广阔的发展前景。我们也将持续完善 RichTap 插件的功能和性能,为 Godot 游戏开发者提供更好的支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2152146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【OSS安全最佳实践】降低因账号密码泄露带来的未授权访问风险

如果因个人或者企业账号密码泄露引发了未经授权的访问,可能会出现非法用户对OSS资源进行违法操作,或者合法用户以未授权的方式对OSS资源进行各类操作,这将给数据安全带来极大的威胁。为此,OSS提供了在实施数据安全保护时需要考虑的…

6. Python 输出长方形,直角三角形,等腰三角形

使用Python输出长方形,直角三角形,等腰三角形 这里主要使用python语言里的循环知识,具体说是Python语言里的循环嵌套, 注意,在实际使用中,循环嵌套一般最多到达3层,嵌套太多会影响到程序执行。…

JavaWeb - 5 - 前端工程化

一.前后端分离开发 前后端混合开发 缺点:沟通成本高,分工不明确,不便管理,不便维护拓展 前后端分离开发 当前最为主流的开发模式:前后端分离 前后端分离开发中很重要的是API接口文档(如:YApi&…

蓝队技能-应急响应篇Web内存马查杀JVM分析Class提取诊断反编译日志定性

知识点: 1、应急响应-Web内存马-定性&排查 2、应急响应-Web内存马-分析&日志 注:传统WEB类型的内存马只要网站重启后就清除了。 演示案例-蓝队技能-JAVA Web内存马-JVM分析&日志URL&内存查杀 0、环境搭建 参考地址:http…

C++函数重载完成日期类相关计算

本文内容如下: 1.创建类以及函数的声明2.日期加减天数1.月份天数2.函数实现 3.日期比较大小4.日期减日期1.日期的前置和后置加加2.日期减日期的实现 5.内置类型的cout和cin本文代码如下: 要完成日期类的相关计算要创建自定义的类型,然后用函数…

Java制作拼图小游戏——基础编程实战(详细代码注释与流程讲解)

目录 前言 涉及知识点 准备工具 Java开发环境 图片资源 最终效果 ——需求分析 登录界面 功能描述 需求分析 功能需求 游戏主界面 功能描述 需求分析 功能需求 游戏菜单 游戏胜利界面 框架搭建 总结 编码 编码顺序 搭建App实现程序的入口 完成User用户类和…

计算总体方差statistics.pvariance()

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 计算总体方差 statistics.pvariance() [太阳]选择题 根据给定的Python代码,运行结果为? import statistics data [1, 2, 3, 4, 5] print(f"【显示】data{…

【C++掌中宝】深入解析C++命名空间:有效管理代码的利器

文章目录 前言1. namespace 的价值2. namespace 的定义3. 命名空间的本质4. 嵌套的命名空间5. 命名空间的使用6. using 指令7. 补充结语 前言 假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外&am…

2.Seata 1.5.2 集成Springcloud-alibaba

一.Seata-server搭建已完成前提下 详见 Seata-server搭建 二.Springcloud 项目集成Seata 项目整体测试业务逻辑是创建订单后(为了演示分布式事务,不做前置库存校验),再去扣减库存。库存不够的时候,创建的订单信息数…

攻防世界Web新手练习区题目(view_source到simple_php)WP

目录 view_source​ robots​ Training-WWW-Robots PHP2​ get_post​ backup​ cookie​ disabled_button​ simple_js​ xff_referer​ weak_auth​ command_execution​ simple_php​ view_source 获取在线场景后访问题目场景 在右键不管用的情况下&#xff0…

尚品汇-秒杀成功下单接口、秒杀结束定时任务-清空缓存数据(五十四)

目录: (1)下单页面 (2)service-activity-client添加接口 (3)web-all 编写去下单控制器 (4)service-order模块提供秒杀下单接口 (5)service-or…

1份可以派上用场丢失数据恢复的应用程序列表

无论如何,丢失您的宝贵数据是可怕的。您的 Android 或 iOS 设备可能由于事故、硬件损坏、存储卡问题等而丢失了数据。这就是为什么我们编制了一份可以派上用场以恢复丢失数据的应用程序列表。 如果您四处走动,您大多会随身携带手机或其他移动设备。这些…

豆包Python SDK接入流程

模型与价格 豆包的模型介绍可以看豆包大模型介绍,模型价格可以看豆包定价文档里的“模型推理” - “大语言模型” - “字节跳动”部分。 推荐使用以下模型: Doubao-lite-32k:每百万 token 的输入价格为 0.3 元,输出价格为 0.6 元…

vue组件($refs对象,动态组件,插槽,自定义指令)

一、ref 1.ref引用 每个vue组件实例上&#xff0c;都包含一个$refs对象&#xff0c;里面存储着对应dom元素或组件的引用。默认情况下&#xff0c;组件的$refs指向一个空对象。 2.使用ref获取dom元素的引用 <template><h3 ref"myh3">ref组件</h3&g…

手机切换IP简单方法:掌握技巧,轻松实现IP变换‌

在当今的数字化时代&#xff0c;IP地址作为网络身份的重要标识&#xff0c;对于网络访问、数据传输等方面都起着至关重要的作用。然而&#xff0c;在某些特定场景下&#xff0c;我们可能需要切换手机的IP地址&#xff0c;以满足不同的网络需求。本文将为大家介绍几种手机切换IP…

Linux —— 多线程

一、本篇重点 1.了解线程概念&#xff0c;理解线程与进程区别与联系 2.理解和学会线程控制相关的接口和操作 3.了解线程分离与线程安全的概念 4.学会线程同步。 5.学会互斥量&#xff0c;条件变量&#xff0c;posix信号量&#xff0c;以及读写锁 6.理解基于读写锁的读者写…

Kafka 3.0.0集群部署教程

1、集群规划 主机名 ip地址 node.id process.roles kafka1 192.168.0.29 1 broker,controller Kafka2 192.168.0.30 2 broker,controller Kafka3 192.168.0.31 3 broker,controller 将kafka包上传以上节点/app目录下 mkdir /app 解压kafka包 tar -zxvf kafka_…

BLE 协议之链路层

目录 一、前言二、状态和角色三、Air Interface Packets1、Preamble 字段2、Access Address 字段2.1 静态地址2.2 私有地址 3、PDU 字段3.1 Advertising Channel PDU3.1.1 Header 字段3.1.2 Payload 字段 3.2 Data Channel PDU3.2.1 Header 字段3.2.2 Payload 字段 4、CRC 字段…

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第一篇-原理】

如果想直接制作&#xff0c;请看【第二篇】内容 这次做一个这样的东西&#xff0c;通过在2DRT上实时绘制&#xff0c;生成动态的体积纹理&#xff0c;也就是可以runtime的VDB 设想的文章流程: 对原理进行学习制作体积渲染制作实时绘制 第一篇&#xff08;本篇&#xff09;是对“…

Spring MVC 基础 : 文件、cookies的接收 ,REST响应

一、接受文件 在 Spring MVC 中&#xff0c;可以使用 RequestPart 注解来接收文件。这个注解常用于处理复杂的请求&#xff0c;如同时发送 JSON 数据和文件。RequestPart 非常适用于多部分请求&#xff08;multipart requests&#xff09;&#xff0c;这在单个请求中同时发送文…