unity android plugin怎么接入 bugly unity android pluginplugin

摘要: 应用提交苹果测试之前,一般都会在沙盒环境里进行测试充值。用沙盒的测试帐号进行充值的时候,服务端拿到苹果返回的receipt-data后,向苹果服务端进行校验的时候,如果返回错误码21007则再去沙盒环境去验证。 沙盒环境的校验地址:https://sandbox./verifyReceipt 正式环境的校验地址:https://buy.itunes.apple....
21:18 meteoric_cry 阅读(11) 评论(0)
摘要: 坑点: 1) iOS 9.1 的safari中,在onTouchBegan方法中调用cc.audioEngine.playEffect播放音效是没有效果的,如果在onTouchEnded调用则是正常的,使用addTouchEventListener来播放也是正常的; 解决方案:在第一次addTouchEventListener回调方法里调用cc.audioEngine.playEffect()...
14:30 meteoric_cry 阅读(16) 评论(0)
摘要: * { -webkit-touch-callout: -webkit-user-select: -webkit-tap-highlight-color: rgba(0,0,0,0);}input,textarea { -webkit-touch-callout: default ! -webkit-user-selec...
22:05 meteoric_cry 阅读(10) 评论(0)
摘要: 昨天吐槽了cocos2d-js的问题,所以就准备调研几个其它HTML5引擎,发现PIXI性能极高,但是没有音频。而Phaser.js是在PIXI.js的基础之上进行的封装。而国内有一家公司,开发一个叫青瓷的引擎(QICI),看上去还蛮不错的,所以准备拿过来调研。看它的文档时,发现视频无法加载,调出控
18:39 meteoric_cry 阅读(43) 评论(0)
摘要: 在华为4.4的设备上,发现H5做的一款小游戏不能播放声音,用cocos2d-js的可以正常播放。手机的UA标识: Mozilla/5.0(LU;Android 4.3; zh-HUAWEI B199 Build/HuaweiB199) AppleWebKit/534.30(KHTML,link Gecko) Version/4.0 Mobile Safar...
14:46 meteoric_cry 阅读(23) 评论(0)
摘要: libuv经过Node.js的实践和应用,已经证明非常之成熟,本来之前项目用的是这个:clsocket /DFHack/clsocket 当初选它的主要原因是它支持Windows、Linux、Mac OSX(我猜测的),但致命的缺点就是仅支持阻塞的TCP,这样就会导致一个问题,在连接游戏服务器、聊天服务器的时候游戏主界面会直接被卡死,等连接成功后才能恢复正常。...
21:19 meteoric_cry 阅读(242) 评论(0)
摘要: codelite官方打不开,从这里下载安装程序,地址:http://sourceforge.net/projects/codelite/ 在使用codelite的时候遇到的几个问题: 1)、中文问题的处理 如果还不行,可以在项目的编译参数上添加 -fexec-charset=GBK;-finput-charset=UTF-8; 2)、设置GDB调试 ...
19:16 meteoric_cry 阅读(146) 评论(0)
摘要: 我本意是想在windows下学习下C++11,而结果是我的Visual Studio 2012不完全支持,而我又懒得去安装,太大了。公司运维也不允许我去下载- -,然后就想能不能在windows环境下搞个gcc玩,然后我又知乎了一把,大意的意见是clang把gcc甩了好远,所以我就决定安装clang环境来学习一下,过程中还是遇了几个坑… -----------------...
14:14 meteoric_cry 阅读(578) 评论(0)
摘要: 最开始项目使用的是自己DIY的很简陋的上报系统,后来改成google breakpad来上报,发现其实都做的不太理想,游戏引擎因为版本历史问题存在一些崩溃问题。后来3.x接入了bugly,我这边抽了几天时间也准备接入,在接入bugly之前我是想用BugTags的,说实话我特别喜欢也为这款产品点赞(它的技术人员、客服人员响应速度和服务都是很赞的,最开始公司总结5个人,我也担任过客服的角色去跟用户沟通...
20:03 meteoric_cry 阅读(518) 评论(0)
摘要: 移动互联网时代,一个APP的平均推广成本早已经超过了10块。而推广通常分二类: 1、已经下载过的用户,可以直接打开应用(一般人的手机上安装的应用都非常多,要快速找到某个应用是很困难的事情,而且Android、IOS的搜索都做的很烂~ ~ ); 2、未下载过的用户,跳转至下载页; 手机设备又分为Android、iOS二大阵营,而原理基本上就是通过url scheme来实现: 浏览...
15:11 meteoric_cry 阅读(189) 评论(0)
摘要: 如果使用fetch获取数据,用的是POST方法,注意headers要添加请求头。当请求为GET时不能用body,当为POST时必须包含body,设置头部之后就一切正常了。 fetch(&http://xx.xx.xx.xx/login.do?srt=2&, { method : 'POST', body : JSON.stringify({ SL...
14:35 meteoric_cry 阅读(396) 评论(0)
摘要: 安装:eclipse(http://www.eclipse.org/)、CDT(C/C++ Development Tooling)、ADT(Android Development Tools) https://dl-/android/eclipse/ 可以先从官方下载jar,然后本地安装:http://www.eclipse.org/cdt/downloads....
21:41 meteoric_cry 阅读(46) 评论(0)
摘要: 先挖个坑,慢慢再来填。出错信息: frameworks/wilhelm/src/android/AudioPlayer_to_android.cpp:779: pthread 0x75f14a00 (tid 13774) sees object 表现为:在几乎同时调用playEffect时调用了stopAll,游戏界面一卡就很容易遇到。官方的解决方案在这里: https://...
18:00 meteoric_cry 阅读(59) 评论(0)
摘要: 下午同事群里有人提醒,小心欺诈邮件。邮件内容为你的帐户在XX存在异地登录,已经进入了【保护模式】,如需解除请点击【解除保护模式】 除了链接之外,其它跟官方的是一模一样,包括标题。 那个链接的地址是:http://103.39.77.23:1100/ ,查了一下是香港的 主界面直接用邮件的资源, 使用微信扫一扫是能登录的,但是会被跳转到了m...
18:53 meteoric_cry 阅读(81) 评论(0)
摘要: 但xcode设置中并没有找到Embed Frameworks这个选项,使用以下方式添加 当遇到dyld: Library not loaded:xxxx Reason: image not found 时,将添加的framework改为optional -----------------------------------------------------...
19:57 meteoric_cry 阅读(48) 评论(0)
摘要: 今天突然接到客服那边的反馈说,有玩家反馈进游戏后不久就崩溃了,我先是怀疑网络问题,因为一连接聊天成功后就挂了。之后用logcat抓日志,发现挂在jni那里了 JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0xf0 string: '' in cal...
19:46 meteoric_cry 阅读(673) 评论(0)
摘要: 标准中int const a 与 const int a 是完全等价的。正因为如此,会有很多各种不同的风格,同样的还有“*是跟类型还是变量?”,比如char* p与 char *p,它们是等价的。 是采用const T& t还是 T const& t呢 是采用int* a 还是int *a呢 我在看《C++ Templates中文版》时,它里面特别提到要使用 int const 这种定...
11:39 meteoric_cry 阅读(88) 评论(0)
摘要: 坑很多,跳之前做好准备。没有VPN的同学请浏览完本文后慎行。 你需要先安装最新版本的node.js(我最后使用的是v4.1.2),前往官网下载&& 注:我win7已经安装过Visual Studio 2013和Android开发环境(也踩了不少坑,后面有截图) 为了方便切换npm源,需要先安装nrm模块 因为公司内把taobao全线屏蔽了,所以我用了cnpm的...
14:22 meteoric_cry 阅读(12233) 评论(3)
摘要: 本文示例参考自《React Native第一课》 React Native官方文档中文版(含最新Android内容) 这里只大概记录下我的操作步骤和遇到的问题,一定要牢记下面这条: 如果你在Mac下遇到提示写入权限时,记得在命令前加上sudo 安装开发所需要的环境,参考这里&& 我所遇到的几个问题: 1) 安装brew curl -LsSf http:/...
21:13 meteoric_cry 阅读(8271) 评论(1)
摘要: 我自己的手机(一加一代,升级了氢OS),然后在点击游戏内一个“隐私政策”-- 需要打开一个网页,然后就crash了。出错的信息如下: 完全是看不出来,然后我单独写了一个demo来测试那段代码,发现错误的详情是这样: 09-29 11:45:27.576: E/AndroidRuntime(17871): android.content.ActivityNotFoundException:...
13:49 meteoric_cry 阅读(280) 评论(0)
摘要: 压缩png效果最好的当然是TinyPNG这种神器了,不过一般情况下TexturePacker压缩出来的也基本上能达到效果。 你需要先安装TP(TexturePacker的简称,以下TP无特殊说明均指TexturePacker) xx:\CodeAndWeb\TexturePacker\bin GUI程序是可视化操作的,实际最终会调用TexturePacker.exe方法,在DOS下直接输入“...
16:16 meteoric_cry 阅读(77) 评论(0)
摘要: 本来这里我一直是只写关于技术的内容,今天破例写一篇关于非技术类的文章(以后可能还会有),文章会写下我的疑惑当然也有一些思考。 将近半年,断断续续的读了一些书,有时候看着看着联想到了一些东西,却又没来得及记录下了。琐碎的事的确是一个客观的原因,它很容易成为我的借口,今天正好看到篇文章,也算是结一个帐吧。有小孩以后,我发现我变了很多,变的更加理性一些,更加乐观一些,从装修房子到小家伙会走路期间...
21:58 meteoric_cry 阅读(57) 评论(0)
摘要: https://zealdocs.org/ 开源、免费,支持Linux、Windows / /dash
15:27 meteoric_cry 阅读(58) 评论(0)
摘要: #!/bin/bash#for debug#请将 TARGET-NAME 改成项目的 TARGET 名称#放置于 .xcodeproj 同级目录中执行target_name=&xx&tmp_dir=&tmp&profile=&xxx-xxx-xxx-xxx-xxx&profile_name=&xx-Dev&sign=&iPhone Developer: xxxx&TIMESTAMP=`da...
18:41 meteoric_cry 阅读(256) 评论(0)
摘要: 用eclipse调试应用时,遇到了这个问题,网上给出的解决方案倒是挺多,但似乎一个都没奏效,而且我手机也重启了,还是有问题,郁闷ing… 然后看到一篇文章指出,可能不是签名和SD的卡问题,而是我们自己的AndroidManifest.xml有问题,然后我想了想,刚刚我似乎只改了这个,然后svn还原,一切正常了… 太吐血了,折腾一上午了- -! 参考: 关于android开...
11:39 meteoric_cry 阅读(44) 评论(0)
摘要: 我们手机游戏中,通过上报收集到的数据来分析,发现相当多的一部分用户,在请求一些配置时会遇到无法解析的情况,或者域名的解析直接被拦截了。 特别是游戏的补丁包文件(放在CDN上),遇到的域名解析失败是最多的,比较小的配置可以通过请求动态接口来获得数据,但是比较大的补丁文件,比如单个zip就超过15M这样的文件,就无法提供接口来返回数据了。这些问题很棘手,如何解决确实困扰了很久 有一个方案,就是分流...
20:14 meteoric_cry 阅读(616) 评论(0)
摘要: 在写很多工具的时候,可能会用到7z命令来进行压缩与解压操作。这里记录二个比较常用的操作:压缩、解压。 在dos窗口下输入7z命令,会显示7z的使用参数详情: 7-Zip 9.10 beta Copyright (c)
Igor Pavlov
Usage: 7z [...] [...] [] ...
11:25 meteoric_cry 阅读(68) 评论(0)
摘要: 先简单介绍一下被迫使用Lua的IO的情境: 游戏支持玩家自定义上传头像,在排行榜中会显示玩家列表(包括本服、跨服),原有的做法是先检测CCUserDefault中是否存在指定图片的key以及它的状态。然后在下载头像、下载完成后设置对应的状态。这样导致的一个问题就是CCUserDefault的读写完全失效了。整个游戏下载的补丁包判断和其它判断就完全失效了,不得卸载游戏后重装。个人目前的推测是...
22:22 meteoric_cry 阅读(539) 评论(0)
摘要: 直接贴代码吧,ios7之后是获取的较为准确,7以下我拿iphone5测试的是无法区分3g/2g。连iphone4都能升到7.1.4,而且目前主流的设备7以下的系统已经很少了,这个方案尽管不太完美,但影响不会太大 #import string GetNetWorkType(){ string strNetworkType = &&; //创建零地址,0.0.0.0...
20:48 meteoric_cry 阅读(416) 评论(0)
摘要: 很多时候需要先判断当前用户的网络,才会继续之后的一些处理逻辑。但网络类型获取这一块,我用我自己的的手机调试时遇到一些问题,这里记录一下。 一加手机一代,移动4G 网络,得到的subtype类型值为17,我查过Android 5.1的源码,它最大的值也就为16。(点击这里在线查看源码&&) 我拿魅族的移动4G测试的结果如下: 小米4,电信4G的测试结果如下: ...
15:12 meteoric_cry 阅读(5653) 评论(0)
摘要: IAP是(In-APP Purchase),苹果商店内购。先来看看它的流程: 而实际运营过程中,经常会遇到这二个问题: 只要应用玩的人比较多,基本上都会遇到过此类问题,下面是来自搜索引擎的结果: 这种情况应该得到重视,对于用户而言实际上是钱已经消费掉了,但是元宝或者物品没有获得,这会让人很焦虑的。的确,作为一名开发人员,遇到这种情况,第...
17:49 meteoric_cry 阅读(1277) 评论(4)
摘要: 游戏出了版本之后,提供给渠道,有部分渠道会修改包名(当他们内部系统做出调整后,可能会改包名),这个时候我又需要知道包名。之前没办法,试图反编译apk,发现失败了。然后就安装apk到手机上,手机上再下载一个包查看软件,然后找到包名。 之后我一直在想,windows下应该是能实现的,而碗豆荚之类的工具,只显示apk的图标和它所需要的权限,它对应的启动activity及包名是没有显示出来的。我尝...
11:16 meteoric_cry 阅读(538) 评论(0)
摘要: String vs NSString JavaScript string Obj-C NSString charAt(index) (see text) charCodeAt(index) - (unichar)characterAtIndex:(NSUInt...
14:40 meteoric_cry 阅读(94) 评论(0)
摘要: iTunes Connect Developer Guide 避免app版本出现在iClound中,我的疑问是对已经上架的版本不能设置,那么这个功能的真正意义在哪里? 大部分用户去应用页面下载时,都会默认下载到已经处于“Ready for Sale”的版本,如果已经上架的版本发现它有问题时,该如何处理呢?似乎只能马上提交新的版本,然后加急说明情况,如果这样,在等待苹果审核和上架...
12:09 meteoric_cry 阅读(77) 评论(0)
摘要: 项目代理给台湾发行,版本由项目提交appstore,台湾合作伙伴会进行测试。这里遇到一个问题,就是沙盒帐号测试的时候死活提示充值失败,不走正常的充值流程。 后来我分析了原因,主要是由于帐号的App Store地区导致的。台湾版本上线时,选择了5个地区,其中包含:香港、台湾,不包含China 然后测试的时候,使用台湾的帐号死活就有问题,切换地区然后提示无法连接上App Store。...
11:33 meteoric_cry 阅读(118) 评论(0)
摘要: 当Android设备通过usb连接成功后,在logcat中能看到很多log信息,但太多了很容易将我们关注的日志给淹没掉,所以我们需要过滤。如果接入了不同的SDK,那么log的tag可能会不同,所以有时需要显示多个tag。 使用“|”进行分隔即可,如下图所示: 如果你在dos窗口下,那么可以使用如下的命令: C:\Users\zhangyi&adb logca...
13:41 meteoric_cry 阅读(1343) 评论(1)
摘要: icon (尺寸为px) 目录 尺寸 (width * height) drawable 72 x 72 drawable-hdpi 72 x 72 drawable-ldpi 36 x 36 ...
15:39 meteoric_cry 阅读(143) 评论(0)
摘要: 更新的时候一直遇到“Base checksum mismatch on”或者“Checksum mismatch while updating”,其它文件可以提交和更新,就这个不行。 网上有解决方案说找.svn目录下的ent..目录,但是我没找到.svn存在那样的目录,还有一种说法是先备份再删除整个svn,但是我这个svn库太大了,好几个G。用delete删除,然后还原,也无效。然后我在想...
14:13 meteoric_cry 阅读(591) 评论(0)
摘要: Objective-C中,内存对象分二类: 1) 值类型,如 int、float、struct等基本数据类型; 2) 引用类型,通常是指继承自NSObject类的OC对象; 值类型在栈中,由系统自动管理,而引用类型在堆上,需要我们自己手工进行管理 OC中提供了二种内存管理机制: 1) 手动引用计数 MRC (Mannul Reference Counting); 2) 自动引用计...
12:52 meteoric_cry 阅读(60) 评论(0)
摘要: 简介 建立在C语言之上,可以混编C/C++代码,编写一个类需要二个文件: .h的头文件 .m的实现文件(如果是C/C++混编文件,文件后缀为.mm) 既然有头文件,所以很多人会拿它与C++进行类比,它最重要的三个特性是:Message、Category、Protocol,与C++类比,二者之间的不同: 1、它没有new也没有delete,但有类似的方法alloc、dealloc; 2、...
12:44 meteoric_cry 阅读(294) 评论(0)Bugly iOS SDK 接入指南
一. SDK 集成
Bugly提供两种集成方式供iOS开发者选择:
1.1 CocoaPods 集成方式
命令行下执行 pod search Bugly ,如显示的Bugly版本不是最新的,则先执行 pod repo update 操作
在工程的Podfile里面添加以下代码:
pod 'Bugly'
保存并运行pod install,然后用后缀为.xcworkspace的文件打开工程。
关于CocoaPods的更多信息请查看
1.2 手动集成方式
下载并解压
拖拽 Bugly.framework 文件到Xcode工程内(请勾选 Copy items if needed 选项)
添加依赖库
SystemConfiguration.framework
Security.framework
libz.dylib
二. 初始化SDK
2.1 导入头文件
在工程的AppDelegate.m文件导入头文件
#import &Bugly/Bugly.h&
如果是Swift工程,请在对应bridging-header.h中导入
2.2 初始化Bugly
在工程AppDelegate.m的application:didFinishLaunchingWithOptions:方法中初始化Bugly:
Objective-C
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[Bugly startWithAppId:@"此处替换为你的AppId"];
return YES;
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
Bugly.startWithAppId("此处替换为你的AppId")
return true
如果您需要上报iOS Watch2 App或iOS App Extension的异常,请参见。
至此,Xcode工程集成Bugly已完成,接下来可以编译并运行你的Xcode工程。
Bugly SDK提供一系列自定义配置或接口供开发者调用,如:
文件配置初始化参数
自定义日志
详细内容请查看。自Bugly上线以来,通过各位开发者的试用和口口相传,目前Bugly已经迎来了大批量的用户,在业内的反响只能用下图来形容:
当然也有很多程序员哥哥在使用的过程中遇到了一些问题,比如按照文档的引导流程正确接入了,但是上报的Crash文档却不可读,很难准确定位到Crash的所在。对于这个问题,小编跪抱技术哥哥们大腿,进行仔细查看,认真琢磨,发现原来都是符号表惹的祸。
说到这里,不禁有人要发问:
在产品开发的过程中,为了进行代码及产品保护,几乎所有的非开源App都会进行代码混淆。但是,当收集到崩溃信息后,就需要进行符号化来还原代码信息,以便开发者可以定位Bug。这就像是谍战戏里的暗号密码的加密与解密一样。为了方便理解,小编在这里给大家举个栗子
先用IOS来举例,当我们没有对代码进行符号化还原的时候,我们通常看到的Crash文档是这样的:
这些都是地址,可读,但是Crash非常难定位,不知道要看瞎多少双程序员哥哥闪亮的大眼~~但是如果经过了符号化解码,我们看到的文件则是这样的:
在Android平台中,这种问题的显示通常是这样的:
为了让文档内容更清晰,更方便地定位到Crash的所在,各位开发者在每次接入的时候,都要手动配置符号表。体验过手动配置的开发哥哥肯定知道这是个多么麻烦的工作,为了解救大家于水火之中,Bugly新增了脚本自动配置符号表功能,抛弃复杂的配置符号表流程,自动化完成配置工作。本次符号表自动配置,IOS 与 Android 开发均可使用,只需按照平台提供的接入指南进行接入,手动配置符号表的苦日子就从此一去不复返了!
(说到这里,请允许小编擦一擦激动的泪水……)
但是配置符号表进行还原之后,很多开发哥哥还是需要颇费眼力地进行逐行扫描,寻找Crash的所在。为此Bugly作为业内的一个颇具良心和情怀的工具类平台,特地新增了如下新功能:
1、优化崩溃堆栈中高亮关键堆栈行,助力高效定位
以前的一堆堆栈,没头没尾,找个关键信息要半天?小萝莉终于受不了,例会上一双大眼睛,泪眼汪汪瞪着大伙,改不改?能敢说不改么? 这不改了么~
2、优化崩溃列表信息展示关键堆栈,一目了然
卡顿功能推出时,卡顿列表中问题第三行信息直接改成“首行应用堆栈”信息,获得大家的一致好评。现在崩溃列表也支持了,愿大家定位崩溃更轻松~
------------更多功能介绍-------------
1、更新 Android NDK动态库 2.0.5
Android Native异常堆栈获取方式重构,获取更全更完善的堆栈
解决空堆栈“empty stack”问题
新增架构支持: arm64-v8a 、x86 、x86_64
2、更新 Unity Plugin SDK 1.2.5
修改接口类为BuglyAgent.cs
修改初始化方法为BuglyAgent.InitWithAppId(string)
添加系统日志回调方法BuglyAgent.LogCallbackDelegate 以替换Application.LogCallback
添加方法BuglyAgent.ReportException(Exception, string)主动上报自定义C#异常
添加方法BuglyAgent.ReportException (string, string, string)主动上报自定义错误
【小编有话说】
听说七夕将至,Bugly的技术同学加班加点,为各位开发哥哥献上这些新功能,希望各位用的放心,用的舒心。人生苦短,把那些配置符号表,辛苦找Crash的时间都拿去挥洒吧,约会自己心中的女神与男神,而们会默默祝福,暂时只能帮您到这儿了。
想了解更多新功能?请密切关注Bulgy的公众号。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:38709次
积分:1085
积分:1085
排名:千里之外
原创:70篇
评论:16条
(5)(2)(4)(6)(8)(6)(5)(8)(6)(23)objective c - How to build Unity3d Plugin for iOS - Stack Overflow
to customize your list.
Stack Overflow is a community of 4.7 million programmers, just like you, helping each other.
J it only takes a minute:
Join the Stack Overflow community to:
Ask programming questions
Answer and help your peers
Get recognized for your expertise
I have a very tiny Objective-C library built for iOS and I want to export it to Unity. I understand the basic process of writing a csharp wrapper that marshals all the invocations to native library, but I completely have no idea where to start. Could anyone please explain step-by-step how to create a unity package with my library so I could also distribute it to other developers.
Unity3d documentation is pretty brief and does not explain anything.
4,47812645
Okay, after playing few days with Unity3d on Mac I finally figured it out. All the code in this guide is dummy. I have written this stuff in 15 minutes or so, so don't be bothered by mistakes and typos.
1) Open Unity, create new project (File -> New Project) and save it somewhere
2) When the project is generated it has the following structure:
ProjectName/Assets (That's what you need)
ProjectName/Library (Nevermind what's there)
ProjectName/ProjectSettings (You don't care about it)
ProjectName/ProjectName.sln (MonoDevelop project)
3) Go to ProjectName/Assets and create the following folders: Plugins/iOS, so in the end you'll have a folder structure like this: ProjectName/Assets/Plugins/iOS
4) Put your compiled library (.a) file and necessary headers inside of ProjectName/Assets/Plugins/iOS or copy the source code of your library there (.mm, .h, .m, etc..). Remember, normally you can only access C-functions from C#, so you'll have to wrap your Objective-C stuff in C-code somehow, in my case all Objective-C objects were implemented in a form of Singleton so it wasn't hard to make a C-style wrapper around, for instance:
CWrapper.h:
extern "C" void MySDKFooBarCFunction();
CWrapper.mm
#import "CWrapper.h"
#import "MyObjectiveCLibrary.h" // your actual iOS library header
void MySDKFooBarCFunction() {
[MyObjectiveCLibrary doSomeStuff];
5) Then go to ProjectName/Assets and create a folder for CSharp wrapper class(es), call it whatever you want, for example: ProjectName/Assets/MySDK
6) Inside of MySDK folder create MySDK.cs file, the dummy example of C# wrapper would look like this:
using UnityE
using System.Runtime.InteropS
public class MySDK
// import a single C-function from our plugin
[DllImport ("__Internal")]
private static extern void MySDKFooBarCFunction();
// wrap imported C-function to C# method
public static void FooBarCFunction() {
// it won't work in Editor, so don't run it there
if(Application.platform != RuntimePlatform.OSXEditor) {
MySDKFooBarCFunction();
7) Create a shell script to pack this stuff into .unitypackage and put it next to your project folder (not inside). Adjust EXPORT_PATH and PROJECT_PATH variables in the script for your needs.
WORKDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
UNITY_BIN="/Applications/Unity/Unity.app/Contents/MacOS/Unity"
EXPORT_PATH="${WORKDIR}/ProjectName.unitypackage"
PROJECT_PATH="${WORKDIR}/ProjectName"
ASSETS_PATH="Assets"
$UNITY_BIN -batchmode -quit \
-logFile export.log \
-projectPath $PROJECT_PATH \
-exportPackage $ASSETS_PATH $EXPORT_PATH
8) Run the created bash script to get your package build. All stuff from Assets will be included in XCode project for your Unity Project when you generate it via File -> Build Settings in Unity Editor. You can use generated package to distribute your code to other developers so they can simply include your library to their Unity projects by double clicking on the package file.
Don't forget to shutdown Unity Editor when you run this script, otherwise it may fail to build a package.
If you have some issues and package does not show up, this script always prints log to export.log
Next steps make sense only if you want to make a Demo unity project for your library (good for testing at least)
9) You can put created Unity project (ProjectName.unity) to Assets/MySDKDemo so you have a demo inside of your package.
10) Create a simple script for your Demo Unity3d scene at Assets/MySDKDemo/MySDKDemo.cs, for example:
using UnityE
using System.C
public class MySDKDemo : MonoBehaviour
private GUIStyle labelStyle = new GUIStyle();
private float centerX = Screen.width / 2;
// Use this for initialization
void Start ()
labelStyle.fontSize = 24;
labelStyle.normal.textColor = Color.
labelStyle.alignment = TextAnchor.MiddleC
void OnGUI ()
GUI.Label(new Rect(centerX - 200, 20, 400, 35), "MySDK Demo", labelStyle);
if (GUI.Button(new Rect(centerX - 75, 80, 150, 35), "DoStuff"))
MySDK.FooBarCFunction();
11) Go to Unity Editor. Find the "Main Camera" in left sidebar in Unity Editor, select it and in the bottom of Inspector panel (right sidebar) click on AddComponent, select Scripts -> MySDKDemo script
12) Build the XCode project and run on device.
1) Plugins don't work in Unity Editor, simply because they're not compiled in the real-time, well, not sure but probably until you use C# in your plugins, probably C# stuff gets linked immidiately and works in Editor environment.
2) This post does not cover marshaling, or data/memory management between native &-> managed code, as it is very well documented.
3) Callbacks from C# to C can be passed using C# delegates, on C-side you use standard functions declarations, on C# side you declare delegates with the same signature. It seems that booleans, integers and strings (C: char*) are marshalled flawlessly (I don't talk about memory management policy and who's responsible to release memory or return value policies).
However it will not work on iOS builds out-of-box due to platform limitations, but C#-to-C callbacks still can be implemented using MonoPInvokeCallbackAttribute, useful links on this topic:
Actually in Unity 4 there's AOT.MonoPInvokeCallbackAttribute already implemented, it's limited to static delegates that can be passed to unmanaged code, but still better than nothing.
4) There's a way to get Unity RootViewController using UnityGetGLViewController function. Just declare this function in your implementation file, i.e.:
extern UIViewController *UnityGetGLViewController();
And use UnityGetGLViewController() whenever you need to get an access to RootViewController.
5) There's much more magic and ugly stuff in details, keep your C interfaces as simple as possible otherwise marshalling can become your nightmare and also keep in mind that managed-to-unmanaged is generally expensive.
6) You definitely use some frameworks in your native code and you don't want linker problems. For example, if you use Keychain in your library then you need to include Security.framework into Xcode project.
I suggest to give a try to , it helps Unity to integrate any additional dependencies into Xcode project.
Good luck!
4,47812645
I have written a post on how to create iOS plugin for unity. You can check it . Hope it helps.
2,249103872
Your Answer
Sign up or
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Post as a guest
By posting your answer, you agree to the
Not the answer you're looking for?
Browse other questions tagged
Stack Overflow works best with JavaScript enabled

我要回帖

更多关于 unity android plugin 的文章

 

随机推荐