大伙不要喷我哈,我只是写一下,最近用EasyAR开发的心得。
1.关于替换Demo中模型的问题。
答:尽可能使用unity3d。原生的用opengl切入太难。
1个月前我对3d模型,unity3d这块也是空白,也想着替换模型。想用原生原因很简单:原生的sdk接入现有的apps更顺,更符合我们常规接入sdk思维。最后放弃了。通过查资料知道模型展示不仅有模型还有灯光,摄像机角度,效果等等(就像一个舞台,单单有演员不够),用opengl,后续这些你怎么接入,即便ok了,做这个的下一步会想到,动态加载模型呈现,到这一步如何实现?至少我自己是没办法做。
后面硬着头皮下载了unity3d,发现也还好,基本就是拖拉。可以参考一下http://www.jianshu.com/p/a00115099e97 ,
http://www.jianshu.com/p/92734936a07e 。我也是照着这个做的。
还有,如果你是像识别到图以后就做自己的业务(扫红包抽奖)可以用原生的sdk,做识别到以后的callback。如果是要做识别到以后显示模型,还是建议用unity3d。
还有朋友像识别到图以后调用android的3d模型显示sdk(类似Rajawali),我也试过了不怎么推荐。原因:A。这种框架多数不能加载大(精度高)的模型。B。还是有场景这块问题,还不能可视化,不如把这个时间去搞unity3d。unity3d入门做easyar的demo真不难,我(phper的)都能搞出来,你一定可以
2.unity导出与android结合的问题。
答:多数朋友是把ar集成到现有的android apps里面。网上的教程多数是unity独立打包成一个app,或者unity为主调用android jar。ar应用恰好是反过来,android为主,ar的为辅(多数是哈)。我也尝试过了,这块也不难。无非是android要用unity里面传递数据,大家可以看一下UnityPlayer.UnitySendMessage 。
导出来之后就是几个so,一堆资源文件,一个activity,把这些拷贝到自己的android工程就是了,就像我们copy网上的其他android工程一样。有个点要注意一下:unityactivity启动后关闭会把apps整个关闭。我暂时解决的办法是unityactivity独立一个进程(AndroidManifest里面那个actvity的android:process=":e.unity3d")
3.unity动态加载模型的问题。
回答:我现在是把要识别的图片,模型/视频。放到自己的cms上。android启动easyar这块的逻辑如下:A。把图片,模型,视频打个zip包。里面写一个自己的json描述文件。B。android下载这个zip包,解压缩,修改这个json描述文件各个资源的路径。C。整个json字符串传递到unity里面(这里的路径要注意一下,坑比较多,每个平台还不一样)。D。unity反序列化json文件,按类型动态绑定imagetarget。
模型这一块打包我是用的assetbundle,在上面的d步骤后加载assetbundle
4.动态加载assetbundle里面的脚本失效。
如果你在assetbundle打包cs脚本,然后尝试动态加载这个assetbundle会提示script missing。我的做法是把脚本再单独打包成dll,用反射加载。如下(不够据说ios不行)
Assembly ass = Assembly.Load (asset.bytes);
System.Type type = ass.GetType('类名');
Component t = obj.AddComponent (type);//obj是GameObject
//如果需要传递值
//我这里是加载材质,然后动态改变模型材质
value = bundle.LoadAsset ('资源值');
MethodInfo method = type.GetMethod ('方法名');
method.Invoke (t, new Object[]{ 值});
以上都是我这段时间摸索出的东西,我之前也是只会一点点android的东西,这样做下来,我还是用的eclipse。as实在用不来。希望能帮助到大家