iOS与Unity3d的交互实现

本文介绍了如何在iOS应用中实现与Unity3d的交互,包括从iOS界面启动Unity、从Unity返回iOS、自定义入口点以及在iOS界面与Unity间跳转的方法。通过理解Unity的项目框架和入口点修改,开发者可以实现iOS与Unity的无缝切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iOS与Unity3d的交互实现

最近在公司写的项目是基于iOS与Unity3d的,之前也写了不少的iOS与Unity的项目,但是这次将两者结合开发还是第一次。项目的第一条功能需求就是:实现从iOS原生界面到Unity的跳转。

看似简单,但是却不知道怎么下手,修改Unity导出到iOS的封装好的代码是肯定的,但是至于改哪里,怎么改却是比较难。和一般的coding一样,一上来先是各种找解决方案和样例,不管是国内大神雨松momo的博客,还是墙外的社区都是搜刮了一番,运气挺好,在某岛国的博客中有人写了一种解决方案。链接戳这里:
https://github.com/mythosMatheWG/unityIntoIOSSample

这里提供的解决方案并没有给出完整的解释,原博主也只是一步步教你在哪里改代码,虽然能运行,但是却不知所以然。而且,这套解决方案有Bug,后来才知道:如果没有处理好ViewController与Unity之间的关系,会导致跳转到Unity之后出现如下错误:

opengles-error-0x0502

然后你的Unity界面内容就糊掉了==!

——继续找,在另外一篇帖子里面看到了比较完整的另外一种解决方案,链接戳这里:
http://game.ceeger.com/forum/read.php?tid=20533

这篇博客的教程就是在这两种解决方案的基础上进行的。旨在提供一套”你跟着做了就能够实现”的较为完整的解决方案。当然,前提是我们假设你会Unity,iOS的一些基础知识


开发环境
  • xcode 7.2
  • Unity4.6.3 (这个无所谓,因为build出来的OC代码没有太大变化)
开发语言
  • OC

正餐

先让了解一下Unity build出来的iOS工程项目的整个框架以及运行流程
Unity导出的工程项目结构图

Main.mm作为整个项目的入口主要做了如下的事情

const char* AppControllerClassName = "UnityAppController";


int main(int argc, char* argv[])
{
    NSAutoreleasePool* pool = [NSAutoreleasePool new];

    UnityInitTrampoline();
    if(!UnityParseCommandLine(argc, argv))
        return -1;

#if INIT_SCRIPTING_BACKEND
    InitializeScriptingBackend();
#endif

    RegisterMonoModules();
    NSLog(@"-> registered mono modules %p\n", &constsection);
    RegisterFeatures();

    // iOS terminates open sockets when an application enters background mode.
    // The next write to any of such socket causes SIGPIPE signal being raised,
    // even if the requ
评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值