APP联合Unity3D实战

💡 原文中文,约24400字,阅读约需59分钟。
📝

内容提要

该文章介绍了在Unity中与iOS和Android进行代码交互的流程。首先,下载Unity无黑Logo版别和相关东西。然后,通过UnitySendMessage方法实现iOS和Unity之间的代码交互。接下来,介绍了在Unity工程中的代码实现和在原生Xcode工程中的代码实现。最后,讲解了在iOS和Android中集成Unity工程的步骤。

🔎

延伸解读

UnitySendMessage的线程限制与替代方案

文章指出UnitySendMessage方法要求目标类必须挂载在GameObject上,且原生回调可能不在Unity主线程,需手动切换线程。因此作者拒绝使用此方法,转而采用C#同名方法反射,通过DllImport导入外部函数,实现更灵活的交互。这种方案避免了线程问题,但需要确保C#与原生方法名一致。

iOS集成中的字符串内存管理要点

在Unity与iOS原生代码交互时,字符串传递需特别注意内存管理。文章强调,从原生返回C字符串给Unity时,必须使用strdup分配内存,否则可能导致闪退;而传入NSString时,需用stringWithUTF8String转换,直接传NSString会崩溃。这些细节是保证稳定交互的关键。

Android集成后的启动图标重复问题

将Unity库集成到原生Android项目后,应用可能出现两个启动图标。这是因为unityLibrary模块的AndroidManifest.xml中定义了额外的启动器入口。文章建议移除该入口,仅保留原生应用的启动配置,以确保应用只显示一个图标。这是集成后常见的配置修正步骤。

自动化脚本在iOS集成中的应用

文章提供了通过Ruby脚本自动化修改Xcode工程配置的方法,包括调整Data文件夹的target membership、将NativeCallProxy.h设为公开、以及添加UnityFramework到主工程并设置Embed & Sign。这些脚本能减少手动操作错误,提高集成效率,尤其适合需要频繁集成的场景。

❓

Q&A

如何在Unity中与iOS进行代码交互?

可以使用UnitySendMessage方法实现iOS与Unity之间的代码交互,但需注意该方法的类必须挂载在一个game object上。

在Unity中如何实现与原生代码的交互?

通过C#同名方法反射和DllImport导入外部函数来实现与原生代码的交互。

如何将Unity工程集成到iOS项目中?

可以手动将Unity打包文件移动到iOS项目的unity3d目录下,并修正相关配置。

在Android中如何集成Unity项目?

需要下载和解压项目,生成Android渠道的Gradle项目,并将Unity Library模块增加到原生Android项目中。

使用UnitySendMessage方法时需要注意什么?

需要确保发送消息的类挂载在一个game object上,并注意线程问题,可能需要告知Unity主线程执行回调。

如何确保应用程序只显示一个启动图标?

需要去掉unityLibrary的AndroidManifest.xml中多余的入口定义,只保留原生Android应用所需的部分。

🏷️

标签

➡️

继续阅读