- 用户指南
- 资源商店 (Asset Store)
- 资源服务器 (Asset Server)(仅限团队许可证)
- 缓存服务器(仅限团队许可证)
- 幕后场景
- 创建游戏
- 运行时实例化预设 (Prefabs)
- 变换 (Transforms)
- 物理
- 添加随机的游戏元素
- 粒子系统(Particle Systems)
- Mecanim 动画系统
- 旧动画系统
- 导航网格 (Navmesh) 和寻路 (Pathfinding)(仅限专业版 (Pro))
- Sound (音频侦听器)
- 游戏界面元素
- 多玩家联网游戏
- iOS 开发入门
- Android 开发入门
- Blackberry 10 开发入门
- Metro:入门指南
- 本地客户端开发入门
- FAQ
- Advanced
- Vector Cookbook
- 资源包(仅限专业版)
- Graphics Features
- 资源数据库 (AssetDatabase)
- 构建播放器管道
- 分析器(仅限专业版)
- 光照贴图快速入门
- 遮挡剔除(仅限专业版)
- 相机使用技巧
- 运行时加载资源
- 通过脚本修改源资源
- 用程序生成网格几何体
- 富文本
- 在 Unity 工程 (Project) 中使用 Mono DLL
- 事件函数的执行顺序
- 移动优化实用指南
- Unity XCode 工程结构
- 优化图形性能
- 减少文件大小
- 理解自动内存管理
- 平台依赖编译
- 泛型函数
- 调试
- 插件(专业版/移动版特有功能)
- 文本场景文件格式(仅限专业版)
- 流媒体资源
- 启动时运行编辑器脚本代码
- 网络模拟
- VisualStudio C 集成
- 分析
- 检查更新
- 安装多版本 Unity
- 故障排除
- Unity 中的阴影
- Unity 中的 IME
- 对集成显卡进行优化
- 网络播放器 (Web Player) 部署
- 使用网络播放器中的信任链系统
构建 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))。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论