本文大部分来自xuanyusong。原文地址http://www.xuanyusong.com/archives/667 。只是xuanyusong文章的是MAC系统。这里写的是WIN7.


首先新建Android的工程,在D:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\bin 这个路径找到classes.jar,加入到Android工程的Libraries。


打开MainActivity.java修改如下:


package com.example.unitytest;import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.view.Menu;import com.unity3d.player.UnityPlayerActivity;public class MainActivity extends UnityPlayerActivity {/*call when the activity is first Created*/Context mContext=null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//setContentView(R.layout.activity_main);mContext=this;}public void StartActivity0(String name){Intent intent=new Intent(mContext,TestActivity0.class);intent.putExtra("name",name);this.startActivity(intent);}        public void StartActivity0(String name){Intent intent=new Intent(mContext,TestActivity0.class);intent.putExtra("name",name);this.startActivity(intent);}public void StartActivity1(String name){Intent intent=new Intent(mContext,TestActivity1.class);intent.putExtra("name", name);this.startActivity(intent);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}


主要修改 ActivityMain继承自UnityPlayerActivity。当然要import com.unity3d.player.UnityPlayerActivity


MainActivity是主Activity,Unity程序一起动就会调用这个Activity,它是在AndroidManifest.xml中配置的。它需要继承UnityPlayerActivity,然而它就是刚刚我们引入的classes.jar包中提供的接口类。MainActivity对外提供了两个方法接口,StartActivity0(String name) 方法与StartActivity1(String name)方法,这两个方法是在Unity中使用C#脚本调用的,意思是调用后程序将打开一个新的Activity,参数name也是由C#脚本传递过来的,接着将传递的String参数继续传递给新打开的Activity。


把鼠标移到TestActivity1和TestActivity0上,点击新建class。继承自Activity。


TestActivity0.java 代码如下

package com.example.unitytest;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.view.View.OnClickListener;public class TestActivity0 extends Activity {@Overridepublic void onCreate(Bundle saveInstanceState){super.onCreate(saveInstanceState);setContentView(R.layout.activity_main);TextView text=(TextView)this.findViewById(R.id.textView1);text.setText(this.getIntent().getStringExtra("name"));Button close=(Button)this.findViewById(R.id.button0);close.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){TestActivity0.this.finish();}});}}


TestActivity1.java 的代码和TestActivity0.java 的代码相同,只是类名不同。………………


package com.example.unitytest;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.view.View.OnClickListener;public class TestActivity1 extends Activity {@Overridepublic void onCreate(Bundle saveInstanceState){super.onCreate(saveInstanceState);setContentView(R.layout.activity_main);TextView text=(TextView)this.findViewById(R.id.textView1);text.setText(this.getIntent().getStringExtra("name"));Button close=(Button)this.findViewById(R.id.button0);close.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){TestActivity1.this.finish();}});}}


layout文件,activity_main.xml

<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/screen"    android:layout_width="fill_parent" android:layout_height="fill_parent"    android:orientation="vertical">    <LinearLayout        android:layout_width="fill_parent" android:layout_height="fill_parent"        android:orientation="vertical">       <TextView android:id="@+id/textView0"          android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:textColor="#000000"  android:textSize="18dip"  android:background="#00FF00"      android:text="Unity World Welcom Android"/> <TextView android:id="@+id/textView1"          android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:textColor="#FFFFFF"  android:textSize="18dip"  android:background="#0000FF"      android:text="Unity call Android"      />        <Button android:id="@+id/button0"            android:layout_width="fill_parent" android:layout_height="wrap_content"            android:text="CloseActivity"/>    </LinearLayout></ScrollView>


在Manifest中配置了3个Activity哦,mainActivity 在我们创建工程的时候已经自动设置好了。

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.unitytest"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="17" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.example.unitytest.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>        <activity             android:name=".TestActivity0"            >        </activity>                <activity             android:name=".TestActivity1"            >        </activity>                    </application></manifest>


转到Eclipse,点击Project 取消Build automaticly 。然后点击build 当前项目。

打开工程文件夹。找到C:\Users\huaxue\workspaceTW_XT\UnityTest\bin\classes\com\example\unitytest 如果build成功。这个文件夹下面会有工程中所有的class 文件。

Unity发送参数给Android打开TestActivity0、TestActivity1_第1张图片


退回到C:\Users\huaxue\workspaceTW_XT\UnityTest\bin\classes ,在这个目录执行命令jar-cvfclass.jar*


这个命令把所有的class文件打包到了class.jar 。其实jar也是和rar一样的压缩文件。我们用winrar打开class.jar。看看里面的路径是不是正确的。


如果没有jar这个命令,那么设置你的环境变量,在path后面加上 C:\Program Files\Java\jdk1.7.0_01\bin


转到Unity。

新建Unity项目,我这里名字是UnityAndroid。

以下步骤不能修改。

在Assets下新建Plugins/Android文件夹。

将Android工程目录下面所有文件除bin、.settings、src这三个目录,都拖到Android文件夹。

在Android新建 bin 目录,把命令生成的class.jar拖进来。


Unity发送参数给Android打开TestActivity0、TestActivity1_第2张图片


OK,项目部署完成。下面开始Unity代码 Test.cs

using UnityEngine;using System.Collections;public class test : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {if(Input.GetKeyDown(KeyCode.Escape)||Input.GetKeyDown(KeyCode.Home)){Application.Quit();}}void OnGUI(){if(GUILayout.Button("Open Activity0",GUILayout.Height(300))){AndroidJavaClass jc=new AndroidJavaClass("com.unity3d.player.UnityPlayer");AndroidJavaObject jo=jc.GetStatic<AndroidJavaObject>("currentActivity");jo.Call("StartActivity0","first Activity");}if(GUILayout.Button("Open Activity1",GUILayout.Height(300))){AndroidJavaClass jc=new AndroidJavaClass("com.unity3d.player.UnityPlayer");AndroidJavaObject jo=jc.GetStatic<AndroidJavaObject>("currentActivity");jo.Call("StartActivity1","second Activity");}}}

直接将它绑定在摄像机中,它用来通知界面打开Activity。如下图所示,利用GUI在屏幕中创建两个按钮,点击按钮打开不同的Activity。


下面就可以build成Android工程了,不过还要设置Android SDK的路径。

在Unity主菜单 Edit->Preference ->External Tools->Android SDK Location 。选择SDK的路径,例如我的 E:\SDK\adt-bundle-windows-x86\adt-bundle-windows-x86\sdk


Unity发送参数给Android打开TestActivity0、TestActivity1_第3张图片


然后File->Build Settings ->Android ->Player Settings,在右侧Inspector 窗口,Per-Platform Settings->Other Settings -> Identification 。Bundel Identifier一定和Android包名一样。下面的Bundle Version也设置为一样的。


Unity发送参数给Android打开TestActivity0、TestActivity1_第4张图片


然后Build。。。。。。。


Over


更多相关文章

  1. eclipse中无法新建Android工程 出现问题:Plug-in org.eclipse.ajd
  2. Android Studio中debug和release模式默认的参数配置
  3. android ksoap2 中把XML(DataSet) 当做参数传递
  4. Android intent.Action 参数值及对应功能介绍
  5. intelliJ IDEA 创建maven android工程的方法
  6. Android工程中R.java文件的重新生成——(注意资源文件的错误)

随机推荐

  1. 五分钟学算法之经典算法题 :排序算法(某东
  2. 字典树概念与题型解析
  3. 程序员的快乐往往就是这么朴素无华且枯燥
  4. 架构 | 到底该不该使用JavaScript框架
  5. 2017年 Web 开发趋势
  6. 超详细!详解一道高频算法题:数组中的第 K
  7. 软件设计原则
  8. 短小精悍,双指针对撞,求解「两数之和 II」
  9. 从零到一学懂区块链(6):哈希函数
  10. (再进阶版)有了四步解题法模板,再也不害怕动