【问题标题】:Unity3d - ios duplicate method found with fmodUnity3d - 使用 fmod 找到的 ios 重复方法
【发布时间】:2013-04-04 05:28:11
【问题描述】:

我正在为 Unity3D 使用 fmod 插件。编译到 Windows 和 OSX 很好,因为我可以动态加载 DLL/dylib。 当我为 iOS 编译时,问题就来了。我用

[DllImport("__Internal")]

因为 iOS 需要静态链接库。当我编译时我得到一个

SystemException: Duplicate native method found : FMOD_System_CreateSound. Please check your source carefully.

我很确定我没有复制符号。我认为这可能是由于 Unity 自己导入 FMOD 并且两者可能会发生冲突......但如果是这种情况,我很惊讶 FMOD_System_CreateSound 是第一个被抓住的。有没有解决的办法?谢谢!

与往常一样,我很乐意提供任何其他详细信息!

这是一个会导致错误的示例项目: Sample Unity Project with FMod

编辑: 冲突是由于 iOS 不允许函数具有相同的名称,即使它们没有相同的签名。删除同名函数后(从而删除了一些我不需要的 FMOD 功能),我可以编译到 iOS,但正如预期的那样,我在初始化时仍然收到错误,因为 FMOD 已经被 Unity 初始化了。

【问题讨论】:

  • 我遇到了同样的问题,来自 Apple 的可达性代码,因为统一实际上已经实现了它。您是否尝试在 Unity API 上使用 FMOD?还是 FMOD 缺少您需要的功能?我读过 unity 暴露了 FMOD 的一些特性。
  • 你试过了吗? squaretangle.com/FMODUnity.html
  • Unity API 上的 FMOD 不允许我从 iOS 沙箱外部流式传输数据。我需要完整的 FMOD API。 square tangle 插件不能解决问题。它只是使用来自 Windows API 的 .cs 并将它们包含在 Unity 项目中。另外,它在您链接的那个页面上说它在 iOS 上不起作用;)

标签: ios duplicates unity3d static-libraries native


【解决方案1】:

Unity3d 已经捆绑了 FMOD 的受限版本,这导致了您所看到的冲突。不幸的是,目前似乎无法禁用它,以便您可以使用完整版的 FMOD

【讨论】:

  • 这个人能够在 Unity 中禁用 FMOD:forum.unity3d.com/threads/…
  • 冲突是由于iOS不允许函数具有相同的名称,即使它们没有相同的签名。删除同名函数后(从而删除了一些我不需要的 FMOD 功能),我可以编译到 iOS,但正如预期的那样,我在初始化时仍然收到错误,因为 FMOD 已经被 Unity 初始化了。
【解决方案2】:

参考您的编辑并查看示例后,确实不能有两个同名的方法,因为编译器无法识别链接到哪个。

很容易解决的办法就是给它们起不同的名字。

至于初始化,如果您可以访问 Unity 3D 已经创建的 FMOD,那么您不必重新初始化它。

我假设指向该对象的指针足以删除重复的初始化。希望这很清楚。

【讨论】:

  • 我今天开始研究这个解决方案,尝试使用 C# 的内置反射来获取对系统对象的引用。虽然找不到它...我确实尝试在 main.mm 中初始化 FMOD 在 Unity 发生任何事情之前,并且确实 Unity 不高兴 FMOD 被初始化!我会继续研究这个。我还看到您可以在统一中创建 SoundCLip,其方式与 fmod 中的流几乎相同,这可能没问题
猜你喜欢
  • 1970-01-01
  • 2019-01-19
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多