Version: Unity 6.0 (6000.0)
语言 : 中文
原生插件
低级原生插件接口

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

桌面平台的插件是可以用 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__种由 Unity 开发的脚本后端,可在为某些平台构建项目时替代 Mono。更多信息
See in Glossary
,则是松散的 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 文件。

其他资源

原生插件
低级原生插件接口