Unity3d与iOS交互开发——接入平台SDK必备技能
时间:2014-05-02 17:03:01
收藏:0
阅读:526
-
原地址:http://www.2cto.com/kf/201401/273337.html#
前言废话:开发手机游戏都知道,你要接入各种平台的SDK。那就需要Unity3d与iOS中Objective-C的函数有交互,所以你就需要用到如下内容:
一、Unity3d To iOS:
1、创建一个C#文件 SdkToIOS.cs 这是调用iOS函数的接口:
2、编写与接口对应的Objective-c函数:12345678// MyIOSSdk.h#import <foundation foundation.h="">@interfaceMyIOSSdk : NSObject@end</foundation>123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129// MyIOSSdk.m#import "MyIOSSdk.h"//这里引用SDK的头文件#import "SDKPlatform.h"#if defined(__cplusplus)extern"C"{#endifexternvoidUnitySendMessage(constchar*,constchar*,constchar*);externNSString* _CreateNSString (constchar*string);#if defined(__cplusplus)}#endif//*****************************************************************************@implementation MyIOSSdk//**********************//message tools+ (void)sendU3dMessage:(NSString *)messageName param:(NSDictionary *)dict{NSString *param =@"";if( nil != dict ) {for(NSString *keyindict){if([param length] == 0){param = [param stringByAppendingFormat:@"%@=%@", key, [dict valueForKey:key]];}else{param = [param stringByAppendingFormat:@"&%@=%@", key, [dict valueForKey:key]];}}}UnitySendMessage("SDK_Object", [messageName UTF8String], [param UTF8String]);}//**********************//SDK fun//初始化SDK-(void)SDKInit{SDKcfg *cfg = [[[SDKcfg alloc] init] autorelease];cfg.appid =123456;cfg.appKey =@"aoaoaoaoaoaoaoaoaoaoaoaoaaoaoaoaoaoaoao";cfg.orientation = UIDeviceOrientationLandscapeLeft;//调用SDK的初始化函数[[SDKPlatform defaultPlatform] SDKInit:cfg];//添加回调监听[[SDKPlatform defaultPlatform] addObserver:self selector:@selector(SNSInitResult:) name:(NSString *)kInitNotificationobject:nil];}//获取用户ID-(NSString*)SDKGetUserID{[[SDKPlatform defaultPlatform] SDKGetUserID];}//**********************//call back fun//初始化更新回调- (void)SNSInitResult:(NSNotification *)notify{[MyIOSSdk sendU3dMessage:@"SDKMsgInit"param:nil];}@end//*****************************************************************************#if defined(__cplusplus)extern"C"{#endif//字符串转化的工具函数NSString* _CreateNSString (constchar*string){if(string)return[NSString stringWithUTF8String:string];elsereturn[NSString stringWithUTF8String:""];}char* _MakeStringCopy(constchar*string){if(NULL ==string) {returnNULL;}char* res = (char*)malloc(strlen(string)+1);strcpy(res,string);returnres;}staticMyIOSSdk *mySDK;//供u3d调用的c函数void_PlatformInit(){if(mySDK==NULL){mySDK = [[MyIOSSdk alloc]init];}[lsSDK SDKInit];}//注意这个函数是返回字符串constchar* _PlatformGetUin(){if(lsSDK==NULL){lsSDK = [[MyIOSSdk alloc]init];}return_MakeStringCopy([[lsSDK SDKGetUserID] UTF8String]);}#if defined(__cplusplus)}#endif
值得一提的是在上面的代码中特意写了一个返回字符串的例子,因为你要获取用户ID 、昵称什么的。对应在cs文件中导入函数如下:12[DllImport ("__Internal")]privatestaticexternstring_PlatformGetUin();这里的const char* 会被C#自动转换成string因为在m文件中使用了内存申请,该段内存自然是处在堆内存中,这样转成string符合c#的内存管理机制,我们不用担心它的释放问题。3、在你的工程目录中找个地方保存iOS的文件
打包出XCode工程后导入进去,加入你的SDK就可以了。
有一点需要说明,如果存放目录为\Assets\Plugins\iOS,那么Unity3d会自动将该目录下的所有文件(暂不支持子文件夹)当做插件文件打包到Xcode工程下的Libraries目录下,这样你就不需要在手动添加了,否则会报错重复声明什么的。
这种文件各个平台会有多个,可以使用同一头文件且定义的C函数名也都相同,这样更有利于多版本管理。
二、iOS To Unity3d:
这个在上面的 MyIOSSdk.m 文件中已经有剧透了,就是利用unity3d 的UnitySendMessage函数,其中参数1是场景中接受消息的对象,参数2是要执行的函数名,参数3为传入参数,只要按照如下步骤就可以实现这个机制:
1、在场景中创建一个对象用于接受iOS消息,或者用现有的也可以;
2、为SDK消息写一个脚本,里面包含各种消息函数;
3、将脚本挂到之前创建的对象上完事;
需要注意:这个对象在场景切换时候要始终存在,或者你在每个场景中都加个这玩意也可以,总之只要能收到消息就行了;
另外,针对参数的传递对应上面的sendU3dMessage函数,我还在消息接受脚本中写过一个消息参数的解析:
123456789101112131415161718192021voidParseMsg(stringmsg,outDictionary<string,string=""> dicMsg){if(null== msg || 0 == msg.Length ){dicMsg =null;return;}dicMsg =newDictionary<string,string="">();string[] msgArray = msg.Split(‘&‘);for(inti=0; i<msgarray.length; i++){=""string[]=""elementarray="msgArray[i].Split(‘=‘);"dicmsg.add(elementarray[0],elementarray[1]);=""}=""}<=""pre=""><br>这个我自己都还没有实际使用过,有错误自行解决大致是这样。<p></p><p><br></p><p>ps:关于SDK的接入还有 android版本的尚未研究网上有很多可以参照;</p><p><br></p><p>pps:SDK多版本管理和研究我也在摸索中,哪位大神比较熟悉不吝赐教,本人万分感激,之前到是看过这个http://www.xuanyusong.com/archives/2418#comments</p><p><br></p><p>ppps:转载请注明来自:http://blog.csdn.net/zhao_yin</p><p><br></p> </msgarray.length;></string,></string,>
评论(0)