博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity3D移植到自己的Android程序
阅读量:6981 次
发布时间:2019-06-27

本文共 2569 字,大约阅读时间需要 8 分钟。

用Unity3D开发需要把动画效果移植到现有的APP上面。Unity for Android 比较特殊,Unity for IOS 打包是将XCODE工程直接交给开发者,开发者可以在工程的基础上继续添加新的视图,最后由开发者自行打包生成IPA包,发布程序。而Unity for Android打包直接生成APK包,等于说源代码开发者是看不到的。试想下,人家既然能打包成APK安装包肯定是走了android-sdk的打包流程,有这流程我们自然能拿到源码(即便是反编译)。研究了一会儿,发现其实很简单,写了一个小DEMO放上来。所有操作如下

首先创建一个android工程,这个很简单就不详细说明了。然后打开Unity的安装目录,找到需要用的class.jar文件,就是封装调用unity引擎的java源码,位置在Unity\Editor\Data\PlaybackEngines\androidplayer\bin\classes.jar(安装目录),然后复制这个文件到android工程的libs目录,系统会自动引用,adt22以下不记得会不会,如果不会的话需要自己设置一下,右键工程

 

 

QQ截图20150515103111

添加这个文件即可。

然后把MainAtivity稍微改一下,就是把继承父类改成UnityPlayerActivity,这样就对接上了unity接口,源码如下:

 

package com.lee.unityandroid;import android.os.Bundle;import android.widget.RelativeLayout;import com.unity3d.player.UnityPlayerActivity;public class MainActivity extends UnityPlayerActivity {	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);		RelativeLayout layout = (RelativeLayout) findViewById(R.id.parent_layout);		layout.addView(mUnityPlayer.getView());	}}

  

 

为了显明观察显示,布局稍微改动了一下。把这个显示在我们的视图上。

activity_main.xml

 

  

 

配置清单文件,这个里面的包名要用到后面Unity的

 

  

 

android基本上就完成了。现在创建一个Unity工程,名字啥的随便取,然后在菜单File->Build Settings->Android->Player Settings

QQ截图20150515104138QQ截图20150515104308

最后生成的APK文件我们直接解压,把里面的assets目录下面的data目录复制到我们工程的assets目录下,然后把lib目录下的armeabi-v7a或armeabi一起复制(如果都有的话,只有其中一个就复制一个即可),最后编译我们的程序,运行效果如下:

device-2015-05-15-104600

白色是我们的布局容器,蓝色就是unity视图内容了。

下面继续说下在Unity中调用Andriod的函数,在Unity工程中创建一个C#脚本,直接将它绑定在摄像机中,它用来通知界面打开Activity。如下图所示,利用GUI在屏幕中创建两个按钮,点击按钮打开不同的Activity。

 

using UnityEngine;using System.Collections; public class Test : MonoBehaviour{ 	// Update is called once per frame	void Update ()	{		//当用户按下手机的返回键或home键退出游戏		if (Input.GetKeyDown(KeyCode.Escape) ¦¦ Input.GetKeyDown(KeyCode.Home) )  		{   			Application.Quit();  		}	} 	void OnGUI()	{		if(GUILayout.Button("OPEN Activity01",GUILayout.Height(100)))		{			//注释1			 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");      	 	 	 AndroidJavaObject jo = jc.GetStatic
("currentActivity"); jo.Call("Method01","第一个方法"); } if(GUILayout.Button("OPEN Activity02",GUILayout.Height(100))) { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic
("currentActivity"); jo.Call("Method02","第二个方法"); } } }

  

 

以上代码就是Java里面的反射机制。

 

  • 本文固定链接: 
  • 转载请注明:  2015年05月15日 于  发表
你可能感兴趣的文章
html5--6-10 CSS选择器7--伪类选择器
查看>>
激光数据匹配(MATLAB Robotics System Toolbox)
查看>>
file_put_contents执行返回false,file_put_contents false(linux服务器httpd)
查看>>
Dependency Walker (depends.exe) Home Page
查看>>
Android---- 如何把calendar.getTimeInMillis()获得的毫秒时间
查看>>
Java学习JVM搞搞Jconsole呗
查看>>
JavaScript学习总结一(String对象的用法)
查看>>
lintcode:背包问题II
查看>>
处理手势冲突和错乱的一点经验
查看>>
Struts2防止表单重复提交
查看>>
[转]Python格式化输出
查看>>
在Activity中响应ListView内部按钮的点击事件
查看>>
CSS - 修改input - placeholder 和 readonly 的样式
查看>>
常用UI布局
查看>>
在多线程情况下 局部变量与全局变量 哪个比较安全呢
查看>>
算法评测
查看>>
40款非常酷的国外创意名片设计欣赏
查看>>
RadioGroup单选按钮用法
查看>>
POJ 2773 Happy 2006
查看>>
UBIFS介绍 - MTD网站
查看>>