您的位置:首页 > 移动开发 > Android开发

将uniy3D集成到android的子窗口中

2016-06-12 21:35 549 查看
最近有一个需求,要将u3d的一个模型展示程序集成到安卓应用(这里我把它叫做宿主app)中,安卓应用会给u3d一个小窗口,然后用户可以在小窗中进行交互。

搜集资料之后,因为很多教程总是会有这样或那样的纰漏,所以我自己做一个相对较为完整的总结。(Unity3D 版本为5.0)

大致流程如下:
在unity3d中build,然后再eclipse中导入u3d生成的安卓工程

新建安卓工程(即宿主app),将u3d的工程作为一个库,导入到宿主中

给宿主app添加u3d的jar包,资源,修改AndroidManifast.xml

在宿主app中添加u3d作为一个子view

导入u3d工程
将在u3d中build整个项目,其生成的android项目的路径为 "u3d项目的根目录/Temp/StagingArea",将这个StageArea拷贝到任意目录(不是Temp就行)。


打开eclipse,新建目录,选择从已有的工程导入,选择上一步的StagingArea即可,一路next,记住所选的android sdk以及Google API的版本


新导入的u3d工程默认名称为UnityPlayerNativeActivity,打开其属性面板,勾选android->Is Library确定即可。

至此,导入u3d工程完毕。

修改宿主工程 新建一个android工程,记住选择的android sdk版本要同上一步中的一样。

将u3d工程作为lib导入,在属性->android->Library->add,选择u3d的工程即可。


导入u3d的jar包,我用的mac os X,路径为"应用程序/Unity/Contents/PlayBackEngines/AndroidPlayer/release/bin/classes.jar",将这个jar包copy到宿主工程的libs目录下,刷新项目即可(主义,此处如果通过属性->Java Build Path->Libraries->Add External JARS导入的话,会出问题,无法找到unity的class,是adt的一个bug)。

将u3d的android工程的assets/目录下的内容copy到宿主。

修改宿主的AndroidManifast.xml文件,将u3d工程的AndroidManifast.xml中的metadata部分复制过来即可。

修改layout/activity_main.xml,我的例子中为u3d加了一个framelayout,id为UnityFrame。

修改宿主的代码,首先是onCreate()函数,向其中添加一个私有成员变量,m_UnityPlayer,然后在其中对m_UnityPlayer初始化,之后向UnityFrame中addview。然后需要重载onWindowFocusChanged函数,让unity能获取窗口焦点。

 
public class MainActivity extends Activity {
private UnityPlayer m_UnityPlayer;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

m_UnityPlayer = new UnityPlayer(this);
int glesMode = m_UnityPlayer.getSettings().getInt("gles_mode", 1);
m_UnityPlayer.init(glesMode, false);

FrameLayout layout = (FrameLayout)findViewById(R.id.UnityFrame);
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
View unityView = m_UnityPlayer.getView();

layout.addView(unityView, 0, lp);

}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
m_UnityPlayer.windowFocusChanged(hasFocus);
}
}
最后编译测试即可!Enjoy it and have fun!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: