Unity3d与iOS交互开发—接入平台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();

}

}

}

  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 charchar *, const charchar *, const charchar *);

extern NSString* _CreateNSString (const char* string);

#if defined(__cplusplus)

}

#endif


//*****************************************************************************

@implementation MyIOSSdk

//**********************

//message tools

+ (void)sendU3dMessage:(NSString *)messageName param:(NSDictionary *)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 selector:@selector(SNSInitResult:) name:(NSString *)kInitNotification object: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 (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

  值得一提的是在上面的代码中特意写了一个返回字符串的例子,因为你要获取用户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函数名也都相同,这样更有利于多版本管理。

  二、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[i].Split('=');

dicMsg.Add(elementArray[0],elementArray[1]);

}

}

  这个我自己都还没有实际使用过,有错误自行解决大致是这样。

  ps:关于SDK的接入还有 android版本的尚未研究网上有很多可以参照;

  pps:这种交互方式在iOS的模拟器上貌似不行,测试请使用真机;

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-08-03 07:00:58

Unity3d与iOS交互开发—接入平台SDK必备技能的相关文章

《iOS应用开发》——1.1节iOS系统简介

1.1 iOS系统简介 iOS应用开发 如果这是你第一次接触iOS开发,欢迎你来到一个激动人心的新世界.iOS阵营提供了一些强大的设备待你探究.尤其是iPhone,它聚集了很多令人兴奋的技术,包括持续在线的因特网.地理定位.运动传感,以及照相功能.就在不久的过去,开发者们如果要尝试这些技术,要么需要自己创建定制的硬件,要么花好几万美元购买.而现在你可以将所有这些技术整个装进你的口袋并且随身携带. iPhone的硬件带来了先前无法想象的机会.革命性的新型社交网络应用程序占主导地位,地理定位应用已经

苹果携手 SAP 开发的 iOS 云平台 SDK 正式上线

摘要:在今年 2 月举行的移动世界大会上,苹果和企业应用软件公司 SAP(思爱普)宣布 SAP 云平台 for iOS 将于今年3月正式上线.今天,SAP 云平台 SDK for iOS 已经正式公布,开发者可以下载并体验了. 全新 SAP HANA Cloud Platform SDK,为企业.设计人员和开发者提供工具,以便他们能够以 SAP HANA Cloud Platform 这一 SAP 的开放式平台的服务为基础,快速.高效地构建用于 iPhone 和 iPad 的自用 iOS app

sdk 游戏平台-关于游戏平台sdk包的开发问题。。。。。

问题描述 关于游戏平台sdk包的开发问题..... 如何写个sdk包,可以用来登录充值,接入我们游戏平台的都可以用这个sdk包,这个开发思路是什么样的啊- -求大神提供思路,类似豌豆荚那种的开发包 解决方案 你需要一个服务器,上面跑一个web service,当人家调用的时候,你可以验证身份并且在你的系统内充值扣值. 然后把你这个web service的地址.参数.返回值等告诉你的调用者,这个接口规范的文档以及例子程序就是所谓的sdk

android开发-关于Android开发中接入TBS SDK的问题

问题描述 关于Android开发中接入TBS SDK的问题 在TBS平台申请了APPKEY之后官方并没有说meta-data中的android:name属性要填什么. 解决方案 TBS?是LBS吧! (1)在application中添加开发密钥 android:name="com.baidu.lbsapi.API_KEY" android:value="开发者 key" /> http://developer.baidu.com/map/index.php?t

《iOS应用开发指南——使用HTML5、CSS3和JavaScript》——2.2节下载和安装iOS SDK

2.2 下载和安装iOS SDK iOS应用开发指南--使用HTML5.CSS3和JavaScript 好在这一过程的其余部分很快速和容易.嗯,主要是容易.不过,呃,也没有那么快,那得要看情况. 问题在于,iOS SDK是我到目前为止下载到电脑里的最大的一个软件.曾经,我在应用程序设计讲习班中用尽各种方法来警告学员下载超过2GB的东西.我的意思是,在它下载的过程中你会感觉自己变老了.所以,如果你在家里使用电缆或者更慢的网络下载它,那么开始下载后,带上你的狗狗去散一个足够长时间的步吧.但是千万不要

《iOS 9 开发指南》——第1章,第1.1节IOS开发入门

第1章 IOS开发入门 iOS 9 开发指南 iOS是一个强大的系统,被广泛地应用于苹果公司的系列产品iPhone.iPad和iTouch设备中.iOS通过这些移动设备展示了一个多点触摸界面及众多内置传感器的界面.本章将带领大家认识iOS系统,为读者步入本书后面知识的学习打下基础. 1.1 iOS系统介绍 iOS 9 开发指南 图片 1 知识点讲解:光盘:视频\知识点\第1章\ iOS系统介绍.mp4 iOS是由苹果公司开发的手持设备操作系统.苹果公司最早于2007年1月9日的Mac World

WWDC 2014 Session笔记 - iOS界面开发的大一统

本文是我的 WWDC 2014 笔记 中的一篇,涉及的 Session 有 What's New in Cocoa Touch Building Adaptive Apps with UIKit What's New in Interface Builder View Controller Advancements in iOS 8 A Look Inside Presentation Controllers iOS 8 和 OS X 10.10 中一个被强调了多次的主题就是大一统,Apple

《iOS应用开发》——2.2节九个基本的程序构建块

2.2 九个基本的程序构建块iOS应用开发我不跟你开玩笑.Objective-C的先前版本学起来非常艰难.一些方面,诸如内存管理,我们只能机械地按照一系列严格的规则来练习.即使是那样,你也很容易出错,导致程序故障.错误以及崩溃.幸运的是,苹果公司持续改进了Objective-C语言并且减少了它的复杂性.因此,我们就只需要花更少的时间驯服程序语言,而有更多的时间来解决实际问题. 然而,如果你之前没有做过任何面向对象编程,那么你可能会有点头大了.有很多需要掌握的新概念:类.对象.子类.父类.重载方法

iOS视频流开发(1)—视频基本概念

手机比PC的优势除了便携外,她最重要特点就是可以快速方便的创作多媒体作品.照片分享,语音输入,视频录制,地理位置.一个成功的手机APP从产品形态上都有这其中的一项或多项,比如instagram,微信.如果把Web2.0的交互体验照搬到手机上就是死路一条. 微视频可以说把手机的视频录制和碎片时间两个特点发挥到了极致,视频相关的APP现在无温不火的原因我认为跟坑爹的运营商有关.虽然现在移动网络流量小速度慢,但是不妨碍我们先把技术积累做起来. 视频实质: 纯粹的视频(不包括音频)实质上就是一组帧图片,