Unity3d游戏开发之如何接入SDK

言废话:开发手机游戏都知道,你要接入各种平台的SDK。那就需要Unity3d与iOS中Objective-C的函数有交互,所以你就需要用到如下内容:

一、Unity3d  To  iOS:

1、创建一个C#文件 SdkToIOS.cs 这是调用iOS函数的接口:
  • public class SdkToIOS: MonoBehaviour{        //平台接入开关
  •    public static bool isOpenPlatform = false;                //导入定义到.m文件中的C函数
  •    [DllImport("__Internal")]
  • private static extern void _PlatformInit();        //定义接口函数供游戏逻辑调用
  •     public static void InitSDK()          {
  •     if (isOpenPlatform)        {
  •        _PlatformInit();        }
  •   }
  •       }

[color=rgb(51, 102, 153) !important] 复制代码
声明:此篇文档时来自于 【狗刨学习网】社区- unity极致学院,是网友自行发布的Unity3D学习文章,如果有什么内容侵犯了你的相关权益,请与官方沟通,我们会即时处理。
2、编写与接口对应的Objective-c函数:
  • //  MyIOSSdk.h#import <Foundation/Foundation.h>@interface MyIOSSdk : NSObject@end
  • //  MyIOSSdk.m#import "MyIOSSdk.h"//这里引用SDK的头文件
  • #import "SDKPlatform.h"#if defined(__cplusplus)extern "C"{
  • #endif    extern void UnitySendMessage(const char *, const char *, const char *);
  •    extern NSString* _CreateNSString (const char* string);#if defined(__cplusplus)
  • }#endif//*****************************************************************************@implementation MyIOSSdk//**********************//
  • message tools+ (void)sendU3dMessage
  • NSString *)messageName paramNSDictionary *)
  • dict{    NSString *param = @"";    if ( nil != dict ) {
  •   for (NSString *key in dict)        {
  •   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 selectorselector(SNSInitResultnameNSString *)kInitNotification object:nil];}//获取用户ID-(NSString*)SDKGetUserID{
  •   [[SDKPlatform defaultPlatform] SDKGetUserID];}
  • //**********************//call back fun//初始化更新回调- (void)SNSInitResultNSNotification *)notify{    [MyIOSSdk sendU3dMessage"SDKMsgInit" param:nil];}
  • @end//*****************************************************************************#if defined(__cplusplus)extern "C"{#endif            //字符串转化的工具函数            NSString* _CreateNSString (const char* string)    {
  •       if (string)            return [NSString stringWithUTF8String: string];
  •     else            return [NSString stringWithUTF8String: ""];
  •    }        char* _MakeStringCopy( const char* string)    {
  •      if (NULL == string) {            return NULL;
  •    }        char* res = (char*)malloc(strlen(string)+1);
  •   strcpy(res, string);        return res;    }
  •    static MyIOSSdk *mySDK;        //供u3d调用的c函数
  •   void _PlatformInit()    {
  •   if(mySDK==NULL)        {
  •     mySDK = [[MyIOSSdk alloc]init];
  •    }        [lsSDK SDKInit];    }
  •    //注意这个函数是返回字符串
  •    const char* _PlatformGetUin()        {
  •             if(lsSDK==NULL)        {
  •   lsSDK = [[MyIOSSdk alloc]init];
  •     }
  •    return _MakeStringCopy([[lsSDK SDKGetUserID] UTF8String]);
  •     }    #if defined(__cplusplus)}#endif

[color=rgb(51, 102, 153) !important] 复制代码



值得一提的是在上面的代码中特意写了一个返回字符串的例子,因为你要获取用户ID 、昵称什么的。对应在cs文件中导入函数如下:
[DllImport ("__Internal")]private static extern string _PlatformGetUin();
这里的const char* 会被C#自动转换成string因为在m文件中使用了内存申请,该段内存自然是处在堆内存中,这样转成string符合c#的内存管理机制,我们不用担心它的释放问题。【 狗刨学习网】

3、在你的工程目录中找个地方保存iOS的文件

打包出XCode工程后导入进去,加入你的SDK就可以了。
有一点需要说明,如果存放目录为\Assets\Plugins\iOS,那么Unity3d会自动将该目录下的所有文件(暂不支持子文件夹)当做插件文件打包到Xcode工程下的Libraries目录下,这样你就不需要在手动添加了,否则会报错重复声明什么的。
这种文件各个平台会有多个,可以使用同一头文件且定义的C函数名也都相同,这样更有利于多版本管理。
声明:此篇文档时来自于 【狗刨学习网】社区- unity极致学院,是网友自行发布的Unity3D学习文章,如果有什么内容侵犯了你的相关权益,请与官方沟通,我们会即时处理。
二、iOS To  Unity3d:

这个在上面的 MyIOSSdk.m 文件中已经有剧透了,就是利用unity3d 的UnitySendMessage函数,其中参数1是场景中接受消息的对象,参数2是要执行的函数名,参数3为传入参数,只要按照如下步骤就可以实现这个机制:

1、在场景中创建一个对象用于接受iOS消息,或者用现有的也可以;
2、为SDK消息写一个脚本,里面包含各种消息函数;
3、将脚本挂到之前创建的对象上完事;

需要注意:这个对象在场景切换时候要始终存在,或者你在每个场景中都加个这玩意也可以,总之只要能收到消息就行了;
另外,针对参数的传递对应上面的sendU3dMessage函数,我还在消息接受脚本中写过一个消息参数的解析:

  •         void ParseMsg(string msg, out Dictionary<string, string> dicMsg){
  •           if( null == msg || 0 == msg.Length ){
  •                  dicMsg = null;
  •            return;
  •       }
  •     dicMsg = new Dictionary<string, string>();
  •           string[] msgArray = msg.Split('&');
  •           for( int i=0; i<msgArray.Length; i++){
  •       string[] elementArray = msgArray.Split('=');
  •                dicMsg.Add(elementArray[0],elementArray[1]);
  •           }
  •    }

你可能感兴趣的:(unity3d,Unity3D游戏,Unity3D培训,Unity培训)