桌面平台插件是您可以在C、C++和Objective C中编写的原生代码库。本页描述了适用于macOS、Windows和Linux的插件一组在Unity外部创建并在Unity中创建功能性的代码。您可以在Unity中使用两种类型的插件:托管的插件(使用Visual Studio等工具创建的托管.NET程序集)和本地插件(特定平台的本地代码库)。 更多信息
见词汇表。有关更多信息,请参阅本地插件在Unity外部创建以供Unity使用的特定平台的原生代码库。允许您访问操作系统调用和第三方代码库等功能,而这些功能通常无法直接提供给Unity。 更多信息
见词汇表。
您可以将macOS插件作为包部署,或者如果您正在使用IL2CPPUnity开发的脚本后端,您可以在一些平台的项目构建中使用它作为Mono的替代品。 更多信息
见词汇表 脚本后端支持Unity中脚本的框架。根据目标平台,Unity支持三种不同的脚本后端:Mono、.NET和IL2CPP。不过,通用Windows平台只支持两种:.NET和IL2CPP。 更多信息
见词汇表,松散的C++文件,您可以使用[DllImport("__Internal")]
语法来调用它们。有关松散C++插件的更多信息,请参阅IL2CPP的C++源代码插件。
使用Xcode创建包项目
有关使用Xcode的更多信息,请参阅Apple关于Xcode的文档。
.cpp
)或Objective-C(文件扩展名为.mm
)实现插件,请使用C链接声明函数,以避免名称修饰问题。extern "C"
{
float ExamplePluginFunction ();
}
Windows上的插件要么是带有导出函数的.dll
文件,要么是使用IL2CPP的松散C++文件。您可以使用创建.dll
文件的大部分语言和开发环境来创建插件。您必须声明任何C++函数以C链接,以避免名称修饰问题。
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中,插件 检查器(Inspector)一个Unity窗口,显示有关当前选定的GameObject、资产或项目设置的信息,允许您检查和编辑值。更多信息
在术语表中查看管理您的插件。要访问插件检查器,选择项目窗口中的插件文件。对于独立平台,您可以选择与库兼容的CPU架构。对于跨平台插件,您必须包含.bundle
文件(适用于macOS)、.dll
文件(适用于Windows)和.so
文件(适用于Linux)。Unity会自动根据目标平台选择正确的插件,并将其包含在玩家中。更多信息,请参阅导入和配置插件。
将编译好的插件放在Unity Project的 Assets 文件夹或适当的架构特定子文件夹中。然后,当您从C#脚本调用它时,Unity通过名称找到它。例如:[DllImport ("PluginName")] private static extern float ExamplePluginFunction ();
注意:不要在PluginName
值中包含库前缀或文件扩展名。例如,如果插件文件的实际名称是Windows上的PluginName.dll
或Linux上的libPluginName
,则两种情况下值应为PluginName
。
您可以下载并使用这些项目来学习如何在Unity中实现插件。