版本:2022.3
语言:英语
本地插件
底层本地插件接口

为桌面平台构建插件

桌面平台插件是您可以在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中,插件 检查器(Inspector)一个Unity窗口,显示有关当前选定的GameObject、资产或项目设置的信息,允许您检查和编辑值。更多信息
术语表中查看
管理您的插件。要访问插件检查器,选择项目窗口中的插件文件。对于独立平台,您可以选择与库兼容的CPU架构。对于跨平台插件,您必须包含.bundle文件(适用于macOS)、.dll文件(适用于Windows)和.so文件(适用于Linux)。Unity会自动根据目标平台选择正确的插件,并将其包含在玩家中。更多信息,请参阅导入和配置插件

Plugin Inspector
插件检查器

从C#脚本中调用您的插件

将编译好的插件放在Unity Project的 Assets 文件夹或适当的架构特定子文件夹中。然后,当您从C#脚本调用它时,Unity通过名称找到它。例如:[DllImport ("PluginName")] private static extern float ExamplePluginFunction ();

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

示例插件

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

本地插件
底层本地插件接口