开发 手机游戏都知道,你要接入各种平台的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/

Unity3d与iOS交互开发—接入平台SDK必备技能相关推荐

  1. UNITY3D与iOS交互解决方案

    原地址:http://bbs.18183.com/thread-456979-1-1.html 本帖最后由 啊,将进酒 于 2014-2-27 11:17 编辑 "授人以鱼,不如授人以渔&q ...

  2. Java微信开发-微信java开发接入平台实例

    微信上接入平台的demo是PHP的,没得java的,所以我自己做接入的时候遇到了一点小问题.用java做带薪开发,首先就要先通过微信的接入配置,大概原理就是微信往服务器发送一些数据,然后在服务器端做一 ...

  3. Android开发接入第三方SDK流程

    接多第三方后,慢慢感觉都是有套路可寻的.但是也有很多要注意的地方 一.SDK集成:这是最重要的,最重要的,最重要的.集成一定要把文档看完,不能因为熟而跳过,或者是快速浏览. 不能跳过的是:混淆文件定义 ...

  4. Java开发必学:Java开发进大厂面试必备技能,技术总监都拍手叫好

    前言 作为同时具备高性能.高可靠和高可扩展性的典型键值数据库,Redis不仅功能强大,而且稳定,理所当然地成为了大型互联网公司的首选. 众多大厂在招聘的时候,不仅会要求面试者能简单地使用Redis,还 ...

  5. Java开发进大厂面试必备技能,技术总监都拍手叫好

    前言 锁是一种用来控制多线程访问共享资源的工具.通常,锁可以独占共享资源:同一时间只有一个线程可以获得锁,并且所有访问共享资源的线程都必须首先获得锁.前面我们介绍过了synchronized,使用sy ...

  6. Unity接入微信SDK——iOS(接入微信SDK)

    Unity接入微信SDK--iOS(一 接入微信SDK) 下载微信SDK 下载地址:微信开放平台 导出Unity Xcode项目 导出Unity Xcode项目,并打开 微信SDK导入Xcode项目 ...

  7. 开发微信小程序的必备技能图谱

    今天被微信小程序彻底刷屏了,哎呀,JS开发者坐等涨工资吧. 小程序是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一扫或者搜一下即可打开应用.也体现了&q ...

  8. iOS 平台 接入新浪微博 SDK 的坑(registerApp 的问题)

    转载:http://leenjewel.github.io/blog/2015/01/08/ios-ping-tai-cocos2d-x-xiang-mu-jie-ru-xin-lang-wei-bo ...

  9. 开发腾讯移动游戏平台SDK ios版Ane扩展 总结

    本文记录了在开发 腾讯移动游戏平台SDK(MSDK) ios版Ane扩展 过程中所遇到的问题 文中非常多问题都是基础的问题.对object c和xcode配置了解不深入导致的.(没办法,开发ane的程 ...

最新文章

  1. springcloud分布式事务_Springcloud 分布式事务集成Naco Seata
  2. python3----智能检测编码的工具
  3. python 扑克牌中的顺子
  4. Jquery创建JSON对象
  5. 解决PHP生成校验码时“图像因其本身有错无法显示”的错误
  6. mysql 触发器 库存管理_Mysql中的触发器(库存、用户订单中用到)
  7. ios html字符串 label,iOS UIlabel怎么加载html字符串 富文本的用法
  8. 腾讯这套SpringMvc面试题你了解多少?(面试必备)
  9. 防护疫情防御插画|后疫情时代宣传不可小觑
  10. 基于swing的java系统_Java实验--基于Swing的简单的歌曲信息管理系统(一)
  11. android togglebutton 自定义,自定义控件之-----ToggleButton
  12. CVE-2018-15982 flash 0day漏洞分析报告
  13. java 抽象工厂 类图_Java设计模式——抽象工厂模式
  14. 怎么把录音导入库乐队_库乐队导入电脑版 苹果库乐队怎么导入歌
  15. 《游戏设计、原型与开发——基于Unity与C#从构思到实现》学习笔记一
  16. python数据分析的常用方法_16种常用的数据分析方法汇总
  17. Android 7.0应用冷启动流程分析
  18. 数据库相关类型(日期、复合、bit、布尔)
  19. excel 画散点图 怎么设置图片的分辨率_【R语言】barplot柱状图+散点图+误差棒
  20. 基于微信小程序游泳馆管理系统(微信小程序毕业设计)

热门文章

  1. 浅谈Python中的type()、dtype()、astype()的区别
  2. webdriver和火狐浏览器历史版本下载
  3. 计算机图形学(十二):真实感图形(光照模型、材质模型)
  4. 中创教育提示:教育机构主动退费?警惕落入退费诈骗陷阱!
  5. 实时头发-面部皮肤分割与人脸肤色分类
  6. 4K智能AI双目自动跟踪云台摄像机
  7. vLive带你走进虚拟直播世界
  8. 2021011029wxy-实验四
  9. IE浏览器即将“退役”,银行、学校的老网站们如何兼容Chrome、Firefox和360等浏览器?
  10. Application.DoEvent使用