返回介绍

为台式机平台构建插件

发布于 2021-06-19 18:03:26 字数 3010 浏览 954 评论 0 收藏 0

本页介绍了台式机平台 (Windows/Mac OS X/Linux) 的本地代码插件。请注意:出于安全考虑,网络播放器已有意禁用所有插件。

为 Mac OS X 构建插件

在 Mac OSX 上,插件被部署为束。选择文件 (File)->新工程 (NewProject...),然后选择束 (Bundle) -> Carbon/Cocoa 可加载束 (Carbon/Cocoa Loadable Bundle) (XCode 3) 或 OS X -> 框架和库 (Framework & Library) -> 束 (Bundle) (XCode 4),即可创建带 XCode 的束工程。

如果使用 C++ (.cpp) 或 Objective-C (.mm) 实现插件,则必须确保使用 C linkage 方式声明函数,避免名称重整问题

extern "C" {
  float FooPluginFunction ();
} 

为 Windows 构建插件

Windows 插件为带输出函数的 DLL 文件。事实上任何能够创建 DLL 文件的语言或者开发环境都可以用来创建插件。
在 Mac OSX 中,必须使用 C linkage 方式声明所有的 C++ 函数,避免名称重整问题。

为 Linux 构建插件

Linux 插件为带输出函数的 .so 文件。这些库主要以 C 或 C++ 编写,但可以使用任何语言。
和其他平台一样,必须使用 C linkage 方式声明所有的 C++ 函数,避免名称重整问题。

32 位和 64 位库

根据平台的不同,32 位和 64 位插件问题也需要不同的处理方法。

Windows 和 Linux

在 Windows 和 Linux 上,插件可以手动管理(例如,在构建 64 位播放器之前,应将 64 位库复制到资源/插件 (Assets/Plugins) 文件夹,在构建 32 位播放器之前,应将 32 位播放器复制到 Assets/Plugins 文件夹),或者,可以将 32 位版本的插件放在 Assets/Plugins/x86 中,并将 64 位版本的插件放在 Assets/Plugins/x86_64 中。默认情况下编辑器将首先在特定结构的子目录中查找,如果此目录不存在,它将从 Assets/Plugins 根文件夹中复制插件。

请注意:对于 Universal Linux 构建,必须使用特定结构的子目录(在构建 Universal Linux 版本时,编辑器将不会从 Assets/Plugins 根文件夹中复制任何插件)。

Mac OS X

对于 Mac OS X,应该将插件构建为通用二进制,同时包含 32 位和 64 位结构。

从 C# 中使用插件

构建插件之后,束应被放在 Unity 工程的 资源 (Assets)->插件 (Plugins) 文件夹中(或对应的特定结构子文件夹内)。若在 C# 脚本中定义如下函数,Unity 将按名称查找插件:-

[DllImport ("PluginName")]
private static extern float FooPluginFunction (); 

请注意:PluginName 不应包含库后缀名或文件扩展名。例如,在 Windows 中,插件文件的实际名称可以是 PluginName.dll,在 Linux 中可以是 libPluginName.so。
需注意的是,每次在插件 (Plugin) 中更改代码之后,都必须在工程中重新编译脚本,否则,插件将不会包含最新编译的代码。

部署

对于跨平台插件,必须在插件 (Plugins) 文件夹内包含 .bundle (Mac)、.dll (Windows) 和 .so (Linux) 文件。 之后,无需进行其他工作。Unity 将自动为目标平台选择正确的插件,并将其打包至播放器。

示例

最简单的插件

此插件工程仅实现了一些最基本的操作(打印数字、打印字符串、添加两个浮点、添加两个整数)。如果这是您的第一个 Unity 插件,此示例将很有帮助。
此工程可在此处查看,且包含 Windows、Mac、和 Linux 工程文件。

从 C++ 代码中渲染

您可在本地插件界面页面查看 Unity 跨平台的多线程渲染插件项目示例。

Midi 插件

Plugin 界面的完整示例可在 此处查看。

此示例展示了使用 Apple CoreMidi API 的完整的 OS X Midi 插件。它也提供 了可以从 Unity 访问的简单 C API 和 C# 类。C# 类包含高级别 API,可以轻松访问 NoteOn 和 NoteOff 事件及其 velocity。

纹理插件

这个例子说明如何在 OpenGL 中直接向纹理分配图像数据(注意前提是 Unity 使用 OpenGL 渲染器)。此示例包括 XCode 和 Visual Studio 工程文件。插件和随附的 Unity 工程都可在此处查看。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文