Android Fragment中加载,嵌套Unity视图

来源:互联网 发布:电视视频通话软件 编辑:程序博客网 时间:2024/06/15 10:59

最近发现android 程序上面嵌套unity视图挺火 我目前公司做这个项目 也是属于android Fragment嵌套unity的视图 我把嵌套的步骤分享给大家 .. 以及与unity3D的交互也分享出来..

第一步 ;公司做unity开发的先将unity程序导出来(导成android项目)
具体如下图
这里写图片描述

把assets文件夹拷贝到自己项目的main文件夹下 与java文件夹同级(如下图)

这里写图片描述

然后把第一张截图(unity导出的文件夹)的libs文件夹下的{armeabi-v7a,x86,unity-classes}将这三个拷贝到自己项目的libs文件夹下(如下图)

这里写图片描述

下面开始就是代码了
第二步: 创建一个类

My_unity

public class My_unity {    public static UnityPlayer mUnityPlayer;    public My_unity() {    }}

在主activity里配置 也就是自己想要嵌套的Fragment的主activity

在MainActivity onCreate方法里加入

    My_unity.mUnityPlayer = new UnityPlayer(this);    getWindow().setFormat(PixelFormat.RGBX_8888);

在其他生命周期里加入

    @Override    protected void onDestroy() {        My_unity.mUnityPlayer.quit();        super.onDestroy();    }    @Override    protected void onPause() {        super.onPause();        Constants.mUnityPlayer.pause();    }    @Override    protected void onResume() {        super.onResume();        My_unity.mUnityPlayer.resume();    }    @Override    public void onConfigurationChanged(Configuration newConfig) {        super.onConfigurationChanged(newConfig);        My_unity.mUnityPlayer.configurationChanged(newConfig);    }    @Override    public void onWindowFocusChanged(boolean hasFocus) {        super.onWindowFocusChanged(hasFocus);        My_unity.mUnityPlayer.windowFocusChanged(hasFocus);    }    @Override    public boolean dispatchKeyEvent(KeyEvent event) {        if (event.getAction() == KeyEvent.ACTION_MULTIPLE)            return My_unity.mUnityPlayer.injectEvent(event);        return super.dispatchKeyEvent(event);    }    @Override    public boolean onKeyUp(int keyCode, KeyEvent event) {        return My_unity.mUnityPlayer.injectEvent(event);    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        return My_unity.mUnityPlayer.injectEvent(event);    }    @Override    public boolean onTouchEvent(MotionEvent event) {        return My_unity.mUnityPlayer.injectEvent(event);    }    public boolean onGenericMotionEvent(MotionEvent event) {        return My_unity.mUnityPlayer.injectEvent(event);    }   

要展示Unity的Fragment的中写一下代码

  View playerView;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle            savedInstanceState) {        // TODO Auto-generated method stub        playerView = My_unity.mUnityPlayer.getView();                                             //具体参数 跟自己公司Unity开发人员协商                                             //第一个参数是unity那边的挂载脚本名字                                              //第二个参数是 unity提供的方法名                                             //第三个参数是 自己要给unity传的值         My_unity.mUnityPlayer.UnitySendMessage("Main Camera","Id","1");        return playerView;    }

最后一步:
千万不要忘记 在app文件夹下的 build.gradle里配置 sourceSets
(sourceSets和 buildTypes 同级)

   sourceSets {        main {            //unity3D             jniLibs.srcDirs = ['libs', 'libs-sdk']        }    }

这样运行 就ok了.. 下面我放一张效果图..(红线里面都是unity视图)
这里写图片描述