牛骨文教育服务平台(让学习变的简单)
博文笔记

Unity3D功能嵌入到Android上

创建时间:2016-07-14 投稿人: 浏览次数:2857

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

QQ截图20150515103111

添加这个文件即可。

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

123456789101112131415161718package 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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:context=".MainActivity" >       <RelativeLayout         android:id="@+id/parent_layout"         android:layout_width="300dp"         android:layout_height="500dp"         android:layout_centerInParent="true" >     </RelativeLayout>   </RelativeLayout>

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

123456789101112131415161718192021222324252627<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.lee.unityandroid"    android:versionCode="1"    android:versionName="1.0" >     <uses-sdk        android:minSdkVersion="10"        android:targetSdkVersion="14" />     <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.lee.unityandroid.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                 <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application> </manifest>

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。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 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<AndroidJavaObject>("currentActivity");          jo.Call("Method01","第一个方法"); } if(GUILayout.Button("OPEN Activity02",GUILayout.Height(100))) { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");          jo.Call("Method02","第二个方法"); } } }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。