原地址:http://www.cnblogs.com/U-tansuo/archive/2012/11/22/unity_ios-plugin.html

说起unity调ios插件,好多淫比较头痛,探索再此给大家献上通用手册。

首先:需要需要一些OC知识,在OC中所有的界面都是基于View显示的,而要使用第三方提供的ios sdk  仅需简单修改源代码,把相应view添加到unity  build出来的xcode工程的根view上即可。也许有人在骂,这不废话,跟没说一样,我坦然接受,因为确实没有干活。

下面给大家实例分析一下:首先要了解Unity发出来xcode工程的结构。

  注意红框和绿框,其中红框在此没用,可以忽略。焦点放在绿框上,UIApplicationMain(argc, argv, nil, @"AppController");是程序的入口,一般的xcode工程都是UIApplicationMain(argc, argv, nil, @"XXXAppDelegete");表示要进入XXXAppDelegete里面的某个方法。本文中会进入到AppController.m中的(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions方法中。为什么会进入此方法,OC规定的(可以自己看看相关文档,我是加断点看出来的)。

2、(BOOL)application:(UIApplication*)application中会调用 [self startUnity:application];进入startUnity方法,这个方法完了后最终会到 OpenEAGL_UnityCallback,这是我们的焦点。以下是此函数中核心代码:

_window = [[UIWindow alloc] initWithFrame:rect];//创建主窗口
  EAGLView* view = [[EAGLView alloc] initWithFrame:rect];//创建根view

#ifdef __IPHONE_6_0
    UnityViewController *controller = _ios60orNewer ? [[UnityViewController_IOS6 alloc] init] : [[UnityViewController_preIOS6 alloc] init];
#else
    UnityViewController *controller = [[UnityViewController alloc] init];
#endif

[_window addSubview:view];//根view 添加到主窗口
    if( [_window respondsToSelector:@selector(rootViewController)] )
    {
        _window.rootViewController = controller;
    }

因此其他任何第三方sdk,几乎都是要将他的view,添加到根view上,当上面函数被执行完后,根view,主window就存在了 现在大家可以为所欲为了。

附带简单demo,希望对大家理解有帮助。

芒果sdK调用

MangGuoController.h

#import <UIKit/UIKit.h>
#import "AdMoGoDelegateProtocol.h"
#import "AdMoGoView.h"
#import "AdMoGoWebBrowserControllerUserDelegate.h" @interface MangGuoController:NSObject<AdMoGoDelegate,AdMoGoWebBrowserControllerUserDelegate>{
AdMoGoView *largeAd; }
@property(nonatomic,retain) UIView *view; @end MangGuoController.m #import "MangGuoController.h"
#import <QuartzCore/QuartzCore.h> @implementation MangGuoController @synthesize view; -(id)init{
self=[super init];
if(self)
{
UIWindow *window= [[UIApplication sharedApplication] keyWindow];//获取主窗口 self.view=[window.subviews objectAtIndex:0];获取根view
largeAd = [[AdMoGoView alloc] initWithAppKey:@"芒果ID"
adType:AdViewTypeNormalBanner
expressMode:NO
adMoGoViewDelegate:self];
largeAd.adWebBrowswerDelegate = self;
largeAd.frame=CGRectZero;
[ self.view addSubview:largeAd];//将芒果view 添加到根view上。
[largeAd release];
}
return self;
} 通过MangGuoController* mg=[[MangGuoController alloc]init];[mg release]; 即可调用广告。特别说明 前面的实例化 最好这样写:
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    printf_console("-> applicationDidFinishLaunching()\n");
    [self startUnity:application];//执行完后 才会实例化出 根view 和主window
   
     MangGuoController* mg=[[MangGuoController alloc]init];//确保存在了根view和主window
[mg release];
    
    return NO;
}

我也是半路出家的OC初学者,词里行间不妥之处,还往大家多多指教。

UIApplication知识点:http://johnlv.blog.sohu.com/185994960.html

unity3D 搞定任意ios插件的更多相关文章

  1. kali系统:局域网arp欺骗, 搞定任意windows计算机

    目的 通过Arp欺骗, 给局域网内的所有用户网页中植入木马, 只要用户运行以后, 就会反弹一个shell到我们计算机 准备 kali系统 metaspolit的使用 Arp欺骗工具:bettercap ...

  2. iOS开发三步搞定百度推送

    iOS开发三步搞定百度推送   百度推送很简单,准备工作:在百度云推送平台注册应用,上传证书. 步骤一: 百度云推送平台 http://push.baidu.com/sdk/push_client_s ...

  3. 开发者经验谈:如何一天时间搞定iOS游戏开发?

    开发者经验谈:如何一天时间搞定iOS游戏开发? 在一天时间里将完成iPhone游戏开发由梦想变为现实? 本文作者给出了从创意转变成现实的详细答案.使用苹果原生游戏引擎SpriteKit,遵循一定的原则 ...

  4. iOS开发——实用技术OC篇&8行代码教你搞定导航控制器全屏滑动返回效果

    8行代码教你搞定导航控制器全屏滑动返回效果 前言 如果自定了导航控制器的自控制器的leftBarButtonItem,可能会引发边缘滑动pop效果的失灵,是由于 self.interactivePop ...

  5. [转]Cordova - 彻底搞定IOS编译!

    本文转自:https://www.cnblogs.com/sunylat/p/9946482.html 操作系统:OSX10.14 XCode:10.1 Cordova:8.1.2 假设已经配置好了C ...

  6. Cordova - 彻底搞定IOS编译!

    操作系统:OSX10.14 XCode:10.1 Cordova:8.1.2 假设已经配置好了Cordova开发环境,Apple ID你也有,XCode也可以正常工作了,那么就可以继续看这篇文章了! ...

  7. (素材源代码)猫猫学IOS(四)UI之半小时搞定Tom猫

    下载地址:http://download.csdn.net/detail/u013357243/8514915 以下是执行图片展示 制作思路以及代码解析 猫猫学IOS(四)UI之半小时搞定Tom猫这里 ...

  8. WEB安全第二篇--用文件搞定服务器:任意文件上传、文件包含与任意目录文件遍历

    零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...

  9. 手把手教你搞定个推iOS推送SDK集成

    以下是一位开发者在集成个推iOS推送SDK过程中的真实经历. 作者:Ezreallp 一次偶然的机会,公司的项目要用到推送,我自己本来就很懒,不愿意去弄整套APNS的流程,刚好之前跟朋友聊起过他们的产 ...

随机推荐

  1. Android音乐播放器的开发实例

    本文将引导大家做一个音乐播放器,在做这个Android开发实例的过程中,能够帮助大家进一步熟悉和掌握学过的ListView和其他一些组件.为了有更好的学习效果,其中很多功能我们手动实现,例如音乐播放的 ...

  2. github的初次体验及管理代码的心得

    周六早上的课上,助教给我们演示了一遍如何上传和下载代码库,新建代码库等等,但是是在linux上的,而我的笔记本的操作系统是win7的.而在教室中的尝试因为网络原因,虽然可以上github的网站,但是下 ...

  3. java多线程-CountDownLatch

    简介 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待.用给定的计数 初始化 CountDownLatch.由于调用了 countDown() 方法,所以在当前计数 ...

  4. Could not load resource factory class [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory]

    WARNING: Failed to register in JMX: javax.naming.NamingException: Could not load resource factory cl ...

  5. Could not open Hibernate Session for transaction;

    javax.servlet.ServletException: org.springframework.transaction.CannotCreateTransactionException: Co ...

  6. BZOJ-2257 瓶子和燃料 分解因数+数论方面乱搞(裴蜀定理)

    一开始真没想出解法...后来发现那么水.... 2257: [Jsoi2009]瓶子和燃料 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 970 So ...

  7. Selenium2+python自动化13-Alert

    不是所有的弹出框都叫alert,在使用alert方法前,先要识别出它到底是不是alert.先认清楚alert长什么样子,下次碰到了,就可以用对应方法解决.alert\confirm\prompt弹出框 ...

  8. codeforce 626E(二分)

    E. Simple Skewness time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  9. Emgu学习之(二)——图像读取、显示、保存

    visual Studio Community 2015 工程和源代码:http://pan.baidu.com/s/1o6u5Fdw 内容 在这篇文章中将提到以下内容: 从文件中读取图像 Image ...

  10. Bootstrap教程:[4]栅格系统详解

    http://jingyan.baidu.com/article/6f2f55a1852aa1b5b83e6c5a.html 们都知道bootstrap3.0使用了四种栅格选项来形成栅格系统,这四种选 ...