版本:Unity 6 (6000.0)
语言:English
分析低级原生插件
低级原生插件接口

为桌面平台构建插件

桌面平台的插件是您可以使用 C、C++ 和 Objective C 编写的原生代码库。此页面描述了适用于 macOS、Windows 和 Linux 的插件在 Unity 外部创建的一组代码,用于在 Unity 中创建功能。您可以在 Unity 中使用两种类型的插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和原生插件(特定于平台的原生代码库)。更多信息
参见术语表
。有关更多信息,请参阅原生插件特定于平台的原生代码库,在 Unity 外部创建,用于在 Unity 中使用。允许您访问诸如操作系统调用和第三方代码库等功能,否则这些功能将无法用于 Unity。 更多信息
参见术语表

macOS 插件

您可以将 macOS 插件部署为捆绑包,或者如果您使用的是IL2CPPUnity 开发的脚本后端,您可以在为某些平台构建项目时将其用作 Mono 的替代方案。 更多信息
参见术语表
脚本后端为 Unity 中的脚本提供支持的框架。根据目标平台,Unity 支持三种不同的脚本后端:Mono、.NET 和 IL2CPP。但是,通用 Windows 平台仅支持两种:.NET 和 IL2CPP。 更多信息
参见术语表
,则可以使用松散的 C++ 文件,您可以使用[DllImport("__Internal")]语法调用这些文件。有关松散 C++ 插件的更多信息,请参阅用于 IL2CPP 的 C++ 源代码插件

使用 Xcode 创建捆绑项目

  1. 打开 Xcode。
  2. 选择文件 > 新建 > 项目 > macOS > 框架和库 > 捆绑包

有关使用 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 中,插件检查器一个 Unity 窗口,显示有关当前选定的游戏对象、资源或项目设置的信息,允许您检查和编辑值。更多信息
参见术语表
管理您的插件。要访问插件检查器,请在项目窗口一个窗口,显示您的Assets文件夹(项目选项卡)的内容 更多信息
参见术语表
中选择一个插件文件。对于独立平台,您可以选择库兼容的 CPU 架构。对于跨平台插件,您必须包含.bundle文件(对于 macOS)、.dll文件(对于 Windows)和.so文件(对于 Linux)。Unity 会自动为目标平台选择正确的插件并将其包含在播放器中。有关更多信息,请参阅导入和配置插件

Plugin Inspector
插件检查器

从 C# 脚本调用插件

将您构建的插件放置在Assets文件夹或 Unity 项目中相应的特定于架构的子目录中。然后,当您从 C# 脚本调用它时,Unity 会通过名称找到它。例如:[DllImport ("PluginName")] private static extern float ExamplePluginFunction ();

注意:不要在PluginName值中包含库前缀或文件扩展名。例如,如果插件文件的实际名称在 Windows 上为PluginName.dll,在 Linux 上为libPluginName,则在这两种情况下,值都应为PluginName

示例插件

您可以下载并使用这些项目来学习如何在 Unity 中实现插件。

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

其他资源

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