首页 文章 精选 留言 我的

精选列表

搜索[技能提示],共10000篇文章
优秀的个人博客,低调大师

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/

优秀的个人博客,低调大师

用 WorkBuddy 搭建「AI × 研发管理」周度情报专题(附提示词)

我在一家全球化制造企业做研发管理,团队做硬件,不是软件。个人长期关注和学习 AI,认为它是制造业企业的效率倍增器。困境很具体:关于 AI 提效的讨论几乎都在软件研发的语境里。 SWE-bench、代码采纳率、PR 数——这些词每周都能读到,但翻译不成我关心的问题:组织怎么调、度量怎么改、岗位怎么变、评审和测试哪个环节先出问题。第二层是节奏差:硬件研发的决策周期以季度计,AI 的变化以周计。人工浏览跟不上;而集团总部与区域团队之间本就存在信息落差,判断更难对齐。我试过三种办法:

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册