文档

Unity Engine

Unity Engine

构建适用于桌面平台的插件

Deploy native code libraries for macOS, Windows, and Linux.
阅读时间6 分钟最后更新于 1 个月前

桌面平台的插件是可以用 C、C++ 和 Objective C 编写的原生代码库。本页面介绍适用于 macOS、Windows 和 Linux 的插件。有关更多信息,请参阅原生插件。

macOS 插件

可以将 macOS 插件部署为捆绑包,如果使用 IL2CPP 脚本后端,则可以部署为松散的 C++ 文件(可以使用
[DllImport("__Internal")]
语法进行调用)。有关松散 C++ 插件的更多信息,请参阅适用于 IL2CPP 的 C++ 源代码插件。
要使用 Xcode 创建捆绑包项目,请执行以下操作:
  1. 打开 Xcode。
  2. 选择文件 (File) > 新建 (New) > 项目 (Project) > macOS > 框架和库 (Framework & Library) > 捆绑包 (Bundle)。
有关使用 Xcode 的更多信息,请参阅 Apple 关于 XCode 的文档。

要求

  • 可以将插件构建为兼容 64 位架构的通用二进制文件。或者,也可以提供单独的 dylib 文件。
  • 如果使用 C++ (
    .cpp
    ) 或 Objective-C (
    .mm
    ) 来实现插件,请使用 C 链接来声明函数,从而避免名称修饰问题:
extern "C"{ float ExamplePluginFunction ();}

Windows 插件

Windows 上的插件是具有所导出函数的
.dll
文件,如果使用 IL2CPP,则是松散的 C++ 文件。可以使用大多数可创建
.dll
文件的语言和开发环境来创建插件。必须使用 C 链接来声明任何 C++ 函数,从而避免名称修饰问题。

Linux 插件

Linux 上的插件是具有导出函数的
.so
文件。虽然这些库通常采用 C 或 C++ 编写,但可使用任何语言编写。必须使用 C 链接来声明任何 C++ 函数,从而避免名称修饰问题。
为 Linux 构建原生插件时,如果构建的库依赖于另一个原生插件,则必须在编译时指定该库的
rpath
。
添加链接器标志
-Wl, -rpath=$ORIGIN
以指定运行时搜索路径。链接器标志指示加载程序除了搜索系统搜索路径之外,还要在库的当前目录中查找其依赖项。可以将其他链接器标志与
-Wl, -rpath=$ORIGIN
一起添加,但 Unity 无法控制它们。例如,
/usr/bin/g++ -o binary.c.o -Wl,-rpath=$ORIGIN
。
或者,也可以在环境中设置
LD_LIBRARY_PATH=dependency path
来指示加载程序在该路径中搜索依赖项。Linux 不会自动在当前目录中搜索依赖项。请确保设置正确的依赖项搜索路径,因为不正确的路径会导致 Unity 编辑器中出现缺少库错误。

管理 Unity 中的插件

在 Unity 中,插件检视面板 (Plugin Inspector) 负责管理插件。要访问插件检视面板,请在项目 (Project) 窗口中选择一个插件文件。对于独立平台,可以选择与库兼容的 CPU 架构。对于跨平台插件,必须包含
.bundle
文件(对于 macOS)、
.dll
文件(对于 Windows)和
.so
文件(对于 Linux)。Unity 会自动为目标平台选择正确的插件并将该插件包含在播放器中。有关更多信息,请参阅导入和配置插件。

插件检视面板

从 C# 脚本调用插件

将已构建的插件放在 Assets 文件夹中或是 Unity 项目中特定于架构的合适子目录中。然后,从 C# 脚本调用 Unity 时,Unity 会按名称查找它。例如:
[DllImport ("PluginName")] private static extern float ExamplePluginFunction ();
注意:
PluginName
值中不可包含库前缀或文件扩展名。例如,如果插件文件的实际名称在 Windows 上为
PluginName.dll
或在 Linux 上为
libPluginName
,则这两种情况下的值都应为
PluginName
。

插件示例

可以下载并使用这些项目来了解如何在 Unity 中实现插件。
  • 最简单的插件示例:此项目实现了一些基本操作(例如,打印一个数字,打印一个字符串,将两个浮点数相加,将两个整数相加)。此项目包含 Windows、macOS 和 Linux 项目文件。
  • 原生渲染器插件:这是一个低级渲染插件,在完成所有常规渲染后,它会从 C++ 代码渲染一个旋转的三角形,并从 C++ 代码填充程序化纹理(使用 Texture.GetNativeTexturePtr 来访问该纹理)。此项目包含 Windows、UWP、macOS、Web 和 Android 文件。

其他资源