Godot游戏如何提升触感体验

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

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

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

 #启动手柄振动,弱电机强度weak_magnitude,强电机强度strong_magnitude,持续时间durationvoid 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.rhkb.cn/news/429242.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

花朵识别系统Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练

一、介绍 花朵识别系统。本系统采用Python作为主要编程语言,基于TensorFlow搭建ResNet50卷积神经网络算法模型,并基于前期收集到的5种常见的花朵数据集(向日葵、玫瑰、蒲公英、郁金香、菊花)进行处理后进行模型训练,最…

解决DockerDesktop启动redis后采用PowerShell终端操作

如图: 在启动redis容器后,会计入以下界面 : 在进入执行界面后如图: 是否会觉得界面过于单调,于是想到使用PowerShell来操作。 步骤如下: 这样就能使用PowerShell愉快地敲命令了(颜值是第一生…

【stm32笔记】使用rtt-studio与stm32CubeMx联合创建项目

使用rtt-studio与stm32CubeMx联合创建项目 创建rt-thread项目 设置项目信息 在项目资源管理器中“右击“,创建RRT studio 项目 双击“RT-Thread 项目“。 选择MCU,设置UART,以及调试方式。添加项目名称,点击“完成“按钮。 …

Redis的主从模式、哨兵模式、集群模式

最近学习了一下这三种架构模式,这里记录一下,仅供参考 目录 一、主从架构 1、搭建方式 2、同步原理 3、优化策略: 4、总结: 二、哨兵架构 1、搭建哨兵集群 2、RedisTemplate如何使用哨兵模式 三、分片集群架构 1&#…

集成学习详细介绍

以下内容整理于: 斯图尔特.罗素, 人工智能.现代方法 第四版(张博雅等译)机器学习_温州大学_中国大学MOOC(慕课)XGBoost原理介绍------个人理解版_xgboost原理介绍 个人理解-CSDN博客 集成学习(ensemble):选择一个由一系列假设h1, h2, …, hn构成的集合…

AI运动小程序开发常见问题集锦一

截止到现在写博文时,我们的AI运动识别小程序插件已经迭代了23个版本,成功应用于健身、体育、体测、AR互动等场景;为了让正在集成或者计划进行功能扩展优化的用户,少走弯路、投入更少的开发资源,我们归集了一部分集中的…

Redis数据结构之set

一.set集合特性 集合类型也是保存多个字符串类型的元素的,但和list列表不一样,集合中的元素是无序的,而且元素不能够重复,不仅支持增删查改,还支持交集并集等操作 二.相关命令 1.sadd sadd key members…… 咱们把…

【机器学习】--- 决策树与随机森林

文章目录 决策树与随机森林的改进:全面解析与深度优化目录1. 决策树的基本原理2. 决策树的缺陷及改进方法2.1 剪枝技术2.2 树的深度控制2.3 特征选择的优化 3. 随机森林的基本原理4. 随机森林的缺陷及改进方法4.1 特征重要性改进4.2 树的集成方法优化4.3 随机森林的…

JavaScript ---案例(统计字符出现次数)

统计字符出现次数 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-w…

深度学习之微积分预备知识点(2)

极限&#xff08;Limit&#xff09; 定义&#xff1a;表示某一点处函数趋近于某一特定值的过程&#xff0c;一般记为 极限是一种变化状态的描述&#xff0c;核心思想是无限靠近而永远不能到达 公式&#xff1a; 表示 x 趋向 a 时 f(x) 的极限。 知识点口诀解释极限的存在左…

LabVIEW软件维护的内容是什么呢?

LabVIEW软件维护涉及多个方面&#xff0c;确保程序的正常运行和长期稳定性。维护内容包括以下几个方面&#xff1a; 1. Bug修复 在开发和运行过程中&#xff0c;可能会出现各种软件问题或缺陷&#xff08;bugs&#xff09;。维护工作之一就是识别这些问题并通过修复程序中的代…

uniapp child.onFieldChange is not a function

uni-forms // 所有子组件参与校验,使用 for 可以使用 awiatfor (let i in childrens) {const child childrens[i];let name realName(child.name);if (typeof child.onFieldChange function) {const result await child.onFieldChange(tempFormData[name]);if (result) {…

【网络】TCP/IP 五层网络模型:网络层

最核心的就是 IP 协议&#xff0c;是一个相当复杂的协议 TCP 详细展开讲解&#xff0c;是因为 TCP 确实在开发中非常关键&#xff0c;经常用到&#xff0c;IP 则不同&#xff0c;和普通程序猿联系比较浅。和专门开发网络的程序猿联系比较紧密&#xff08;开发路由器&#xff0…

Qt5详细安装教程(包含导入pycharm)

1.自行下载Qt 2.双击进行安装 3.设置完成后勾选接受&#xff0c;跳转下一步 4.可选择安装位置&#xff0c;比较习惯安装在D盘 5.根据需求勾选对应组件安装 6.安装完成后&#xff0c;打开pycharm&#xff0c;进入settings—>选择ExternalTools&#xff0c;根据以下步骤进行配…

【WEB】EZ_Host

1、 2、解答 http://8762a9b0-5aa3-49f8-b8d2-54e4cb0746cc.www.polarctf.com:8090/?hostlocalhost;lshttp://8762a9b0-5aa3-49f8-b8d2-54e4cb0746cc.www.polarctf.com:8090/?hostlocalhost;cat flag即可看到答案

数据中台系统产品原型RP原型Axure高保真交互原型 源文件分享

在数字化时代&#xff0c;数据已经成为企业最宝贵的资产之一。为了更好地管理和利用这些数据&#xff0c;这边为大家整理了一套数据中台Axure高保真原型。这套原型致力于为企业提供全方位的数据服务&#xff0c;助力企业实现数据驱动的创新发展。 下载及预览地址&#xff1a;h…

828华为云征文|Flexus云服务器X实例部署宝塔运维面板

本次华为云Flexus云服务器X实例部署宝塔运维面板教学&#xff0c;这次是推陈出新啊 之前的云耀云服务器L实例已经很不错了&#xff0c;大力赞叹华为云的 同时感谢华为云提供优惠卷&#xff0c;只能说白嫖真是太棒了 华为云近期正在筹办华为云828企业节活动&#xff0c;90款免…

java重点学习-设计模式

十三 设计模式 工厂模式&#xff1a;spring中使用&#xff08;目的是&#xff1a;解耦&#xff09; 1.简单工厂 所有的产品都共有一个工厂&#xff0c;如果新增产品&#xff0c;则需要修改代码&#xff0c;违反开闭原则是一种编程习惯&#xff0c;可以借鉴这种编程思路 2.工厂方…

嵌入式入门小工程

此代码基于s3c2440 1.点灯 //led.c void init_led(void) {unsigned int t;t GPBCON;t & ~((3 << 10) | (3 << 12) | (3 << 14) | (3 << 16));t | (1 << 10) | (1 << 12) | (1 << 14) | (1 << 16);GPBCON t; }void le…

一个基于Gin + Vue 开发前后端分离的微型进存销系统,专为小微企业量身定制

前言 在这个信息化高速发展的时代&#xff0c;企业管理软件的需求日益增长&#xff0c;然而市面上许多现有的管理系统要么过于复杂&#xff0c;不适合小型企业的快速的需求&#xff1b;要么价格高昂&#xff0c;让许多初创企业望而却步。 针对这些痛点&#xff0c;我们迫切需…