插件适用于Linux Unity Editor,但不适用于独立的Linux版本

时间:2016-09-05 02:23:24

标签: c ubuntu unity3d plugins unityscript

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

如何构建库:

gcc -shared PluginName.c -o PluginName.so

这是我迄今为止所做的尝试:

  • LD_LIBRARY_PATH的东西?
    • 将.so所在的目录添加到LD_LIBRARY_PATH
  • Unity如何构建应用程序有问题吗?
    • 尝试了不同的版本(5.3.6)
  • 在VM上运行的操作系统有问题吗?
    • 从另一台PC上运行的Ubuntu 15.10中尝试
  • 也许插件需要' lib'字首?
    • 添加' lib'字首。
  • 导入设置有问题吗?
    • 选中导入设置,在平台设置中检查x86_64
  • 库是否需要位于不同的目录中?
    • 放入插件
    • 放入插件/ x86_64
    • 放入与可执行文件相同的目录

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

1 个答案:

答案 0 :(得分:0)

正如预期的那样,最终解决起来有点模糊。我找到了遇到同样问题的人,他们能够帮助我。 Unity在Linux上加载库的方式有些奇怪,这就是解决方案。

  • ' LIB'必须是库的前缀。例如libSimplePlugin.so
  • 应正确设置Unity中的导入选项
    • 在"选择插件平台"检查"编辑"和#34; Standalone"
    • 在"平台设置"在Unity选项卡中选择CPU:x86_64,OS:Linux
    • 在" PC,Mac& Linux Standalone设置"选项卡检查x86_64
    • 注意:我的库只有64位,设置可能因库构建而异[/ li>
    • 注意:你可以在没有其中一些的情况下离开,但最好是安全方面犯错,并确保导入设置正确
  • 将你的externs放在他们自己的静态C#类中,并有条件处理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

  • 中使用