android和unity交互踩坑

新公司项目里有用到unity和android交互,记录下这些坑

unity导出android工程


导出设置

图一的地方时包名需要一致,不然方法不生效

图二的是存储文件的位置,需要截图存取文件一定要注意路径是"storage/emulated/0/项目路径/video_20190423_114910.mp4"


关掉默认欢迎页面

****注意,unity碰到大的项目的时候,IOS和Andorid的生成项目会非常大,我们项目android10个G,IOS有30个G所以经常使用两个model来分别导出不同端,请注意,一定不能混着用,混着用的后果,ememememe,做好等一天的准备。

导出项目后,android端就是

熟悉的样子

把其中的

把上图的几个东西考到已有项目里就好了

implementation files('libs/unity-classes.jar')

然后就开始在activity里加东西

UnityPlayer mUnityPlayer = new UnityPlayer(this);

//setContentView(mUnityPlayer);

fl_bim.addView(mUnityPlayer);

mUnityPlayer.requestFocus();

实际上我们都会在页面加一个FrameLayout 来加载UnityPlayer 

<FrameLayout android:id="@+id/fl_bim"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_weight="1" android:orientation="horizontal"></FrameLayout>

注意,

这些生命周期必须跟着写,不然unityPlay不会生效。

坑1.unity初始化和加载模型,是占用主线程的,不可以使用dialog这种转圈方式,不然unity是不会继续任务

这时候需要在unity在初始化的时候加个图片,然后在初始化完成或者模型加载完毕后把这个图片移除。

坑2.unity在退出时,会调用mUnityPlayer.quit();quit()里又要调用kill()这个方法,会杀死当前进程,所以需要重写kill()阻止杀死。

但这也不能完全解决,还需要在AndroidManifest.xml里单独给activity开线程


unity和android交互方法比较固定

android调用unity的方法  mUnityPlayerUnitySendMessage(method, params1, params2..);

unity调用android: 

#if UNITY_EDITOR Debug.Log("u_ISendCapture");

#elif UNITY_ANDROID

AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

jo.Call("IGetCapture",data);

字母要大写要大写要大写

public void IGetCapture(String path){

Log.e("IGetCapture",path); 

}

unity调到android的方法时,如果需要改变UI,需要使用

runOnUiThread(new Runnable() {

@Override public void run() {

}

});

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容