版本:Unity 6 (6000.0)
语言:English
集成第三方代码库(插件)
托管插件

导入和配置插件

如果您有托管插件使用 Visual Studio 等工具创建的托管 .NET 程序集,用于在 Unity 中使用。 更多信息
参见术语表
原生插件在 Unity 之外创建的特定于平台的原生代码库,用于在 Unity 中使用。允许您访问诸如操作系统调用和第三方代码库等功能,否则这些功能在 Unity 中将不可用。 更多信息
参见术语表
,您可以将其导入 Unity,然后对其进行配置。在编辑器中,插件在 Unity 之外创建的一组代码,用于在 Unity 中创建功能。您可以在 Unity 中使用两种类型的插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和原生插件(特定于平台的原生代码库)。 更多信息
参见术语表
被视为一个资源,类似于脚本,您可以在检查器窗口中对其进行配置。

您可以使用插件配置来指定插件运行的位置;哪些平台和哪些平台配置,以及在什么条件下。

导入插件

将插件导入项目的简单方法是单击并将其拖动到 Assets 文件夹或其子文件夹中。Unity 将特定文件和文件夹类型识别为插件。它还可以应用与插件预期平台匹配的默认设置。

支持的插件文件和文件夹类型

Unity 将具有以下扩展名的文件视为插件

  • a
  • .aar
  • .bc
  • .c
  • .cc
  • .cpp
  • .dll
  • .def
  • .dylib
  • .h
  • .jar
  • .jslib
  • .jspre
  • .m
  • .mm
  • .prx
  • .rpl
  • .so
  • .sprx
  • .suprx
  • .swift
  • .winmd
  • .xex
  • .xib

Unity 还将某些文件夹视为捆绑插件。Unity 不会在这些文件夹中查找其他插件文件,因此文件夹中的所有内容都被视为单个插件。Unity 将具有以下扩展名的文件夹视为捆绑插件

  • .androidlib
  • .bundle
  • .framework
  • .plugin

插件默认设置

如果插件在 Assets 文件夹中的路径与特定于平台的模式匹配,则 Unity 会自动将特定于平台的默认设置应用于该插件。如果路径与任何模式都不匹配,则 Unity 会将编辑器平台的默认设置应用于该插件。

下表显示了 Unity 识别的路径模式。方括号中显示的路径部分是可选的。当路径包含双点时,它可以包含更多文件夹。

文件夹路径模式 默认设置
Assets/../Editor/(x86x86_64 或 x64) 平台:仅限编辑器

CPU(可选):如果存在,则基于子文件夹。
Assets/../Plugins/(x86_64x86 或 x64) 平台:Windows、Linux 和 macOS

CPU(可选):如果存在,则基于子文件夹。
Assets/Plugins/iOS 平台:iOS
Assets/Plugins/WSA/(SDK80SDK81PhoneSDK81)/(x86ARM) 平台:通用 Windows 平台

SDK(可选):如果存在,则基于子文件夹。出于兼容性原因,SDK81 为 Win81,PhoneSDK81 为 WindowsPhone81。

CPU(可选):如果存在,则基于子文件夹

注意:您可以使用关键字Metro代替WSA

更改插件设置

在 Unity 中,插件要么是托管的,要么是原生的。下表显示了每种类型的插件的相关设置

设置 托管 原生
为插件选择平台 x x
平台设置 x x
资源标签 x x
资源包 x x
常规 x
定义约束 x
插件加载设置 x

要在检查器一个 Unity 窗口,显示有关当前选定的 GameObject、资源或项目设置的信息,允许您检查和编辑值。 更多信息
参见术语表
中查看和更改插件设置,请在项目窗口中选择插件文件。

Settings for a managed plug-in (left) and a native plug-in (right).
托管插件(左)和原生插件(右)的设置。

常用插件设置

为插件选择平台平台设置指定 Unity 在哪些构建中包含该插件。

下表描述了常用设置。

设置 选项 说明
为插件选择平台 编辑器:用于播放模式和在编辑时运行的任何脚本。
独立:Windows、Linux 和 macOS。
• Unity 安装中包含的任何平台,例如 Android、iOS 和 Web。
要允许插件与尚未包含在 Unity 中的平台一起使用,请选中任何平台。如果您的不支持某些平台,您可以将其排除。

导入插件时,Unity 会将其加载到内存中。原生插件无法卸载;即使在更改其设置后,它也会在 Unity 会话中保持加载状态。要卸载插件,您必须重新启动 Unity。
平台设置 对于您选择的每个平台,您可以指定其他条件,例如 CPU 架构和依赖项。Unity 仅显示适用于您的平台的设置,并在可能的情况下,适用于该平台上的特定插件类型。例如,扩展名为 .dll 的原生插件文件只能在 Windows 上运行,因此 Unity 仅显示 Windows 设置。
编辑器 • CPU 架构
• 操作系统
大多数托管插件都兼容任何 CPU 和操作系统。

大多数原生插件仅兼容单个操作系统,并且根据其编译方式,可能仅兼容单个 CPU 架构。
Windows、Linux 和 macOS • CPU 架构
• 操作系统
托管库通常与任何操作系统和 CPU 架构兼容,除非它们访问特定的系统 API。

原生库仅兼容单个操作系统,但可以与 32 位、64 位或两种 CPU 架构兼容。
通用 Windows 平台 请参阅通用 Windows 平台:IL2CPP 脚本后端上的插件
Android CPU 架构 CPU 架构必须与库编译所用的架构匹配。Unity 不会验证您的设置。

另请参阅:AAR 插件和 Android 库
iOS 和 tvOS • 框架依赖项
• CPU 架构
• 添加到嵌入式二进制文件
• 编译标志
指定您的插件兼容的 CPU 架构。Unity 提供 ARM64 和 X64 模拟器架构用于测试目的。

选择添加到嵌入式二进制文件选项时,Unity 会将 Xcode 项目选项设置为将插件文件复制到最终应用程序包中。对于以下情况执行此操作:
• 动态加载的库。
• 包含动态加载库的捆绑包和框架。
• 任何需要在运行时加载的资源和资源。

编译标志字段中,为 Unity 必须作为构建的一部分进行编译的插件源代码文件设置编译标志。

提示:有关其他常用设置的信息,请参阅资源包在编辑器中搜索

托管插件设置

托管插件可以是第三方库或用户编译的程序集,您希望将其包含在项目中。

常规 - 自动引用

自动引用设置控制项目中的程序集定义如何引用插件文件。启用自动引用时,所有预定义的程序集和程序集定义都会自动引用插件文件。

默认情况下启用自动引用

要限制可以引用插件的范围,请禁用自动引用。然后,您需要显式声明对该插件的所有引用。如果您希望执行以下操作,则可能需要这样做:

  • 您希望防止脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间推移修改组件属性并以任何您喜欢的方式响应用户输入。 更多信息
    参见术语表
    错误地使用插件。
  • 您正在迭代插件并希望减少编译时间。如果显式声明插件,Unity 只会重新编译相关的程序集,而不是整个项目。
  • 您希望防止在资源商店包中使用的插件与导入该包的项目中的其他代码发生冲突。

禁用自动引用时,Unity 无法从为您的项目创建的预定义程序集中引用插件。这些预定义的程序集包含项目中所有未分配给另一个程序集(使用程序集定义文件)的脚本。要引用来自具有禁用自动引用属性的插件的类、函数或其他资源,引用代码必须位于使用程序集定义文件创建的程序集中。例如,如果项目中的一组脚本使用插件,则必须为这些脚本创建程序集定义文件,并在定义文件中添加对插件的显式引用。

多个程序集可以使用插件,但所有程序集都必须显式声明依赖项。要了解有关 Unity 中程序集定义的更多信息,请参阅程序集定义

注意自动引用选项不影响文件是否包含在构建中。要控制插件的构建设置,请使用平台设置

常规 - 验证引用

Unity 可以检查插件的引用是否在项目中可用。如果您不执行此验证,则用户在应用程序尝试使用缺失的引用时可能会遇到运行时错误。

启用验证引用选项以检查

  • 插件的引用是否存在。例如,如果您的插件引用插件 Newtonsoft.Json.dll,并且 Unity 找不到 Newtonsoft.Json.dll,则 Unity 会显示错误。
  • 强命名引用是否能够加载。这一点很重要,因为强命名引用需要匹配版本。例如,如果您使用对“b.dll”版本 2.0.0 的引用编译插件,则该版本必须位于项目中。

如果您不想检查强命名引用,但仍想检查引用是否存在

  1. 插件检查器中,启用验证引用

  2. 在**项目设置** > **Player** > **其他设置** > 中禁用**程序集版本验证**。

定义约束

您可以指定Unity加载插件到内存并引用它的条件。这些条件是必须满足的符号,这意味着已定义或未定义。

约束的工作方式类似于C#中的#if预处理器指令,但作用于程序集级别而不是脚本级别。您可以在程序集定义属性中了解更多关于约束的信息。

您可以使用Unity的任何内置定义符号,或在**项目设置** > **Player** > **其他设置** > **脚本编译** > **脚本定义符号**中添加符号。您添加的符号是特定于平台的,因此您需要为每个相关平台定义它们。有关更多信息,包括内置符号列表,请参阅平台相关编译

提示:要指定某个符号必须未定义,请在其前面加上否定符号!(感叹号)。

在以下示例中,我们希望Unity仅在Unity 2018.3或更高版本中,非IL2CPP脚本运行时加载并引用插件。我们定义了两个约束,并且必须满足这两个约束

  • ENABLE_IL2CPP未定义
  • UNITY_2018_3_OR_NEWER已定义
Define Constraints for a specific runtime and Unity version
为特定运行时和Unity版本定义约束

插件加载设置 - 启动时加载

您可以开始执行独立于图形初始化、脚本、资源加载、场景场景包含游戏环境和菜单。可以将每个唯一的场景文件视为一个独特的关卡。在每个场景中,您可以放置环境、障碍物和装饰物,从本质上讲,您可以分段设计和构建游戏。 更多信息
参见词汇表
等的本机代码。这与播放器加载本机插件的默认方式不同,默认方式是等到第一次调用插件函数之一时,通常由脚本执行。

要在应用程序执行任何脚本之前加载插件

  1. 在插件中实现UnityPluginLoad。请参阅低级本机插件接口
  2. 在编辑器中,选择**插件加载设置** > **启动时加载**。

提示:有关C#脚本调用插件函数的示例,请参阅手册:本机插件

其他资源

集成第三方代码库(插件)
托管插件