我想使用 Wwise 在 Godot 中创建空间声音。我正在使用 https://github.com/alessandrofama/wwise-godot-integration
问题在于使用 AkGeometry 节点。使用几何对于自动计算物体的衍射和透射(阻挡和遮挡)以及模拟早期反射非常重要。 集成商的文档没有阐明如何使用该节点。它只是说 AkGeometry 应该是 MeshInstance3D 节点的子节点。我也找不到任何教程。 当我将 AkGeometry 作为子节点添加到 MeshInstance3D 节点并运行该项目时,出现错误:
E 0:00:02:0587 create_from_surface:条件“p_mesh.is_null()”为真。返回:ERR_INVALID_PARAMETER
场景/资源/mesh_data_tool.cpp:43 @ create_from_surface()
和
E 0:00:02:0588 Push_error:[AK_InvalidParameter]:src/wwise_gdextension.cpp 中的 set_geometry:931。
核心/变体/variant_utility.cpp:1091 @push_error()
我尝试过,只是为了测试,将 AkGeometry 作为子节点分配给不是 MeshInstance3D 的 3D 节点。然后出乎意料的是,没有出现任何错误。 (但是也没有效果。)
我尝试使用(MeshInstance3D 节点的)脚本将 AkGeometry 分配给 MeshInstance3D:
var akGeometry = AkGeometry.new()
add_child(akGeometry)
然后我得到了与上面相同的错误(它发生在第
add_child(akGeometry)
行中。
在同一个脚本中我也尝试了这个:
var akGeometry = AkGeometry.new()
akGeometry.set_geometry(self)
但是,程序无法开始运行(正在加载和加载),然后崩溃。
我也尝试过不使用这个积分器并使用
Wwise.set_geometry()
代替。然而这个函数的参数需要从网格实例中获取一些数据(比如顶点数组和三角形数组),这似乎相当复杂。
我是 Godot 和 Wwise 的新手,如果有任何帮助,我将不胜感激!
您所做的似乎是正确的:将 AkGeometry 节点作为子节点附加到 MeshInstance3D。
虽然没有直接回答你的问题,但这里有一些一开始让我困惑的事情:
尝试生成音库并重新生成 Wwise ID
您可能还需要告诉 Godot 自动加载 Init.bnk。进入 Project Settings,切换“Advanced Settings”,向下滚动到底部,在 Wwise 设置下,查看“Common User Settings”并选中“Load Init Bank at Startup”
我现在也有同样的想法,正在尝试实现遮挡和阻塞。
关于您的错误,我认为是否在插件代码中发现了错误。 这里,它尝试调用
create_from_surface()
方法,但如果父级网格是 ArrayMesh,则 array_mesh
变量不会初始化。
我认为这就是您收到此错误的原因:
E 0:00:02:0587 create_from_surface:条件“p_mesh.is_null()”为真。返回:ERR_INVALID_PARAMETER 场景/资源/mesh_data_tool.cpp:43 @ create_from_surface()
我尝试使用 BoxMesh,效果很好。我猜如果
array_mesh
变量是一个 ArrayMesh,则应该用网格来初始化。
但是,您确定 AkGeometry 可以用于自动计算遮挡和遮挡吗?阅读Audiokinetic文档,它说:
游戏设计者必须计算影响每个听者的每个游戏对象的阻碍和遮挡,并通过 AK::SoundEngine::SetObjectObstructionAndOcclusion() 调用将值传递给声音引擎。
我将在本周进行一些测试,首先看看我们是否可以自动进行阻塞和遮挡计算,如果它有效,我将尝试修复该插件。如果修复有效,我可能会在插件的 github 上创建一个问题。
如果您发现其他任何东西,请告诉我,我会告诉您我发现了什么^^