最近发现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视图)