插件在 Linux Unity Editor 中有效,但在独立的 Linux 构建中无效

Plugin works in Linux Unity Editor but not in standalone Linux build

我从这个例子的代码中得到了一个非常简单的插件 (https://docs.unity3d.com/Manual/NativePlugins.html)。我正在使用插件中的值更新 UI 文本字段。这在编辑器中按预期工作,但在我构建独立应用程序时不起作用。我是 运行 Ubuntu 15.10.

库的构建方式:

gcc -shared PluginName.c -o PluginName.so

这是我到目前为止尝试过的方法:

关于为 Linux 构建 Unity 插件的信息似乎也很少。一个端到端的例子会很有用。任何解决此问题的帮助将不胜感激。

正如预期的那样,这最终解决起来有点晦涩难懂。我发现有人 运行 遇到了同样的问题,他们能够帮助我。 Unity 在 Linux 上加载库的方式有些奇怪,这是解决方案。

  • 'lib' 必须是图书馆的前缀。例如libSimplePlugin.so
  • Unity 中的导入选项应该正确设置
    • 在 "Select platforms for plugin" 下检查 "Editor" 和 "Standalone"
    • 在 "Platform settings" 中的 Unity 选项卡 select CPU: x86_64, OS: Linux
    • 在 "PC, Mac & Linux Standalone settings" 选项卡中勾选 x86_64
    • 注意:我的库只有 64 位,设置可能因您的库构建而异
    • 注意:您可以在没有其中一些的情况下逃脱,但为了安全起见并正确设置导入设置会更好
  • 将你的 externs 放在它们自己的静态 C# 中 class 并有条件处理 Unity 库命名

    using System;
    using System.Runtime.InteropServices;
    
    public static class Native
    {   
        // The name of the external library containing the native functions
        #if UNITY_EDITOR
        private const string LIBRARY_NAME = "libSimplePlugin";
        #else
        private const string LIBRARY_NAME = "SimplePlugin";
        #endif
    
        [DllImport(LIBRARY_NAME)] public static extern float FooPluginFunction ();
    } 
    
  • 调用你的函数

    Native.FooPluginFunction ();
    
  • 经验证可在 Unity 5.3.6 中使用