找回密码
 注册帐号

扫一扫,访问微社区

构建 ios 插件

2015-1-8 18:07| 发布者: 杨炎| 查看: 1796| 评论: 0|原作者: 蛮牛|来自: unity3d脚本manual

摘要: 构建 ios 插件本页详细说明了 ios 平台的本地代码插件。为 ios 创建带本地插件的应用程序按以下方式在 c# 文件中定义外部方法:private static extern float foopluginfunction ();设定 ios 编辑器的构建目标将本地 ...

构建 ios 插件

本页详细说明了 ios 平台的本地代码插件。

为 ios 创建带本地插件的应用程序

按以下方式在 c# 文件中定义外部方法:

[dllimport ("__internal")]

private static extern float foopluginfunction ();

设定 ios 编辑器的构建目标

将本地代码源文件添加至生成的 xcode 工程“类”文件夹(工程更新不会覆盖此文件夹,但务必备份本地代码)。

如果使用 c++ (.cpp) 或 objective-c++ (.mm) 实现插件,那么必须要确保您创建的功能使用 c linkage 方式声明,避免出现名称重整问题

extern "c" {

float foopluginfunction ();

}

以 c 或 objective-c 编写的插件无需此项操作,因为这些语言不使用名称重整。

从 c# 使用插件

ios 本地插件只有在部署到实际设备之后才能被调用,因此,建议所有本地代码的类函数都使用一个额外的 c# 代码层包装。此代码应检查 application.platform,而且仅在应用程序在设备上运行时调用本地类函数;应用程序在编辑器中运行时将返回虚值。查看 bonjour 浏览器应用程序的案例。

从本地代码中调用 c# / javascript

unity ios 通过unitysendmessage:unitysendmessage("gameobjectname1", "methodname1", "message to send");

支持有限的本地管理回调功能。这项功能包括三个参数:目标游戏对象 (gameobject) 的名称、调用这一对象的脚本类函数以及传递给所调用类函数的信息字符串。

已知限制:

只有符合以下命名规则的脚本类函数才能被本地代码调用:function methodname(message:string)

unitysendmessage调用为异步,并且有一帧的延时。

自动插件集成

unity ios 以有限的方式支持自动插件集成。在资源 (assets)/插件 (plugins)/ios文件夹内所有扩展名为.a.m.mm.c.cpp的文件都将自动合并到生成的 xcode 工程。但是,合并通过将资源 (assets)/插件 (plugins)/ios中的文件符号链接至最终目的地来完成,这可能影响部分工作流程。.h文件不包含在 xcode 工程树内,但是它们将出现在目标文件夹中,从而实现 .m/.mm/.c/.cpp 文件编译。

注意:目前不支持子文件夹。

ios 提示

在 ios 中托管和非托管的调用非常占用处理器。尽量避免在一帧内调用多个本地类函数。

如上所述,使用调用设备本地代码的 c# 层包装本地类函数,并在编辑器中返回虚值。

本地类函数返回的字符串值应为 utf-8 编码,并且分配在堆上。这种字符串可在 mono 上进行自由编组调用。

如上所述,xcode 工程的“类”文件是很好的保存本地代码的位置,因为工程更新之后,它不会被覆盖。

另一个很好的储存本地代码的位置是资源 (assets) 文件夹或其子文件夹。只需从 xcode 工程中将引用添加至本地代码文件:右击"类 (classes)" 子文件夹并选择“添加 (add)->现有文件 (existing files)...”。

示例

bonjour 浏览器实例

点击此处可查看使用本地代码插件的简单实例。

这一实例演示了如何在 unity ios 应用程序中调用 objective-c 代码。此应用程序实现了非常简单的 bonjour 客户端。 此应用程序包括 unity ios 工程(plugins/bonjour.cs 是本地代码的 c# 接口,而 bonjourtest.js 则是实现应用程序逻辑的 js 脚本)和应添加至内置 xcode 工程的本地代码(资源 (assets)/ 代码 (code))。

相关阅读

文章点评
相关文章
蛮牛教育10.1大促销!全站6折扣!