Version: Unity 6.0 (6000.0)
语言 : 中文
集成第三方代码库(插件)
托管插件

导入和配置插件

如果您有托管插件原生插件,则可以将其导入 Unity,然后进行配置。在编辑器中,插件被视为类似于脚本的资源,可以在检视面板 (Inspector) 窗口中对其进行配置。

您可以使用插件配置来指定插件的运行位置、运行平台和平台配置以及运行条件

导入插件

将插件导入项目的最简单方法是单击插件并将其拖动到 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/(SDK80__ 或 SDK81PhoneSDK81)/(x86ARM) 平台__:通用 Windows 平台

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

CPU__(可选):基于子文件夹(如果存在)

注意__:可以使用关键字 Metro 而不是 WSA

更改插件设置

在 Unity 中,插件为__托管插件__或__原生插件__其中之一。下表显示了每种插件类型的相关设置:

|设置 |托管|原生 | |:—|:—|:—| |Select platforms for plugin|x|x |Platform settings|x|x| |Asset Labels|x|x| |Asset Bundles|x|x| |General|x| | |Define Constraints|x| | |Plugin load settings| |x|

要在__检视面板__中查看与修改插件设置,请在项目 (Project) 窗口中选中插件文件。

托管插件(左)和原生插件(右)的设置。
托管插件(左)和原生插件(右)的设置。

常见插件设置

选择插件平台 (Select platform for plugin)平台设置 (Platform settings) 指定了含有 Unity 插件的构建。

下表介绍了常见设置。

设置 选项 注意
Select platforms for plugin 编辑器 (Editor):适用于播放模式和在编辑时运行的任何脚本。
独立平台 (Standalone):Windows、Linux 和 macOS。
• Unity 安装中包含的任何平台,例如 Android、iOS 和 Web。
要允许插件与 Unity 中尚未包含的平台配合使用,请查看__任何平台 (Any Platform)。如果不支持单独的平台,则可以排除掉它们。

导入插件时,Unity 会将其加载到内存中。原生插件无法卸载;即使在更改其设置后,该插件仍会在 Unity 会话中加载。必须重新启动 Unity 才能卸载该插件。|| |
Platform settings|针对所选的每个平台,您可以指定其他条件,例如 CPU 架构和依赖关系。Unity 仅显示适用于平台的设置,以及适用于该平台上特定插件类型的设置(如果可能)。例如,扩展名为 .dll 的原生插件文件只能在 Windows 上运行,因此 Unity 仅显示 Windows 设置。||| |编辑器|• CPU 架构
• 操作系统|大多数托管插件与任何 CPU 和操作系统都兼容。

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

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

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

选中__添加到嵌入式二进制文件 (Add to Embedded Binaries)
选项后,Unity 将设置 Xcode 项目选项,从而将插件文件复制到最终应用程序包。此操作适用于:
• 动态加载库。
• 包含动态加载库的程序包和框架。
• 任何需要在运行时加载的资产和资源。

在__编译标志 (Compile Flags)__ 字段中,设置 Unity 必须在构建过程中编译的插件源代码文件的编译标志。

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

托管插件设置

托管插件可以是第三方库,也可以是要包含在项目中的用户编译程序集。

常规 - 自动引用

自动引用 (Auto Reference) 设置用于控制项目中的程序集定义引用插件文件的方式。启用自动引用后,所有预定义程序集和程序集定义自动引用插件文件。

默认情况下会启用 Auto Reference

要限制可以引用插件的范围,请禁用 Auto Reference。然后,您需要显式声明对该插件的所有引用。如果满足以下条件,您可能希望执行此操作:

  • 希望防止脚本错误地使用插件。
  • 正在迭代插件并希望减少编译时间。如果显式声明插件,则 Unity 仅会重新编译依赖程序集,而不是整个项目。
  • 希望防止资源商店包中使用的插件与导入了此包的项目中的其他代码发生冲突。

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

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

注意Auto Reference 选项对一个文件是否包含在构建中没有影响。要控制插件的构建设置,请使用平台设置 (Platform settings)

常规 - 验证引用

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

启用验证引用 (Validate References) 选项可检查:

  • 插件的引用是否存在。例如,如果插件引用了插件 Newtonsoft.Json.dll,而 Unity 无法找到 Newtonsoft.Json.dll,则 Unity 会显示错误。
  • 是否可以加载强命名引用。这一点很重要,因为强命名引用需要与版本相匹配。例如,如果编译的插件引用了“b.dll”版本 2.0.0,则该版本必须位于项目中。

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

  1. Plugin 检视面板中,启用 Validate References
  2. 项目设置 (Project Settings) > 播放器 (Player) > 其他设置 (Other Settings) > 禁用程序集版本验证 (Assembly Version Validation)

定义约束

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

约束的作用与 C# 中的 #if 预处理器指令类似,但在程序集级别(而不是脚本级别)运行。可以在程序集定义 (Assembly Definition) 属性中了解有关约束的更多信息。

可以使用 Unity 的任何内置定义符号,也可以在项目设置 (Project Settings) > 播放器 (Player) > 其他设置 (Other Settings) > 脚本编译 (Script Compilation) > 脚本定义符号 (Scripting Define Symbols) 中添加符号。添加的符号特定于平台,因此需要为每个相关平台进行定义。请参阅平台相关的编译以了解更多信息(包括内置符号的列表)。

提示:要表示必须取消定义某个符号,请在该符号前面添加表示否定的 !(感叹号)符号作为前缀。

在以下示例中,我们希望 Unity 仅在 Unity 2018.3 或更高版本的非__ IL2CPP__种由 Unity 开发的脚本后端,可在为某些平台构建项目时替代 Mono。更多信息
See in Glossary
脚本运行时加载和引用该插件。我们定义了两个约束,必须满足这两个约束:

  • ENABLE_IL2CPP 未定义
  • UNITY_2018_3_OR_NEWER 已定义
定义特定运行时和 Unity 版本的约束
定义特定运行时和 Unity 版本的约束

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

可以开始执行独立于图形初始化、脚本、资源加载、场景等的原生代码。这与播放器加载原生插件的默认方式不同,后者是等到首次调用插件的某个函数(通常由脚本执行)时才加载。

要在应用程序执行任何脚本之前加载插件,请执行以下操作:

  1. 在插件中实现 UnityPluginLoad。请参阅低级原生插件接口
  2. 在编辑器中,选择插件加载设置 (Plugin load settings) > 启动时加载 (Load on startup)

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

其他资源

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