unity3D 搞定任意ios插件
原地址: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
相关文章
- Flex AIR应用拍照功能(Android和IOS版本)
- ios audio不能够正常播放
- iOS GitHub Top 100 简介
- ios上 更改 状态栏(UIStatusBar)的颜色
- IOS 30多个iOS常用动画,带详细注释
- 三步教你iOS导入.ttf字体文件
- iOS 使用AFNetworking
- iOS之UI--关于modal
- iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist)
- 社交网络编程API之iOS系统自带分享
- IOS中 浅谈iOS中MVVM的架构设计与团队协作
- iOS中 蓝牙2.0详解/ios蓝牙设备详解
- Cocos2d-x与ios内存管理分析(在游戏中减少内存压力)
- iOS不用上架就能下载安装ipa应用内测:使用FIR.im发布自己的移动端APP
- iOS swift 隐藏navigationController?.navigationBar navigationItem
- ios oc 用关联对象给分类(协议)添加属性(关联的引用: Associative References)
- Swift学习笔记(3)iOS 9 中的网络请求
- Android 9.0 仿ios的hotseat效果修改hotseat样式
- Ios开发之 -- js和ios的交互
- 自己的自定义单元格(IOS)