Unity 用户手册Advanced构建 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))。



本Unity3d教程文章由游戏蛮牛Cocos2D教程整理推荐

你可能感兴趣的:(unity3d)