将uniy3D集成到android的子窗口中

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

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

大致流程如下:

 
 
  • 在unity3d中build,然后再eclipse中导入u3d生成的安卓工程
  • 新建安卓工程(即宿主app),将u3d的工程作为一个库,导入到宿主中
  • 给宿主app添加u3d的jar包,资源,修改AndroidManifast.xml
  • 在宿主app中添加u3d作为一个子view
导入u3d工程
  1. 将在u3d中build整个项目,其生成的android项目的路径为 "u3d项目的根目录/Temp/StagingArea",将这个StageArea拷贝到任意目录(不是Temp就行)。
  2. 打开eclipse,新建目录,选择从已有的工程导入,选择上一步的StagingArea即可,一路next,记住所选的android sdk以及Google API的版本
  3. 新导入的u3d工程默认名称为UnityPlayerNativeActivity,打开其属性面板,勾选android->Is Library确定即可。
至此,导入u3d工程完毕。 修改宿主工程
  1. 新建一个android工程,记住选择的android sdk版本要同上一步中的一样。
  2. 将u3d工程作为lib导入,在属性->android->Library->add,选择u3d的工程即可。
  3. 导入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)。
  4. 将u3d的android工程的assets/目录下的内容copy到宿主。
  5. 修改宿主的AndroidManifast.xml文件,将u3d工程的AndroidManifast.xml中的metadata部分复制过来即可。
  6. 修改layout/activity_main.xml,我的例子中为u3d加了一个framelayout,id为UnityFrame。
  7. 修改宿主的代码,首先是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!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值