本文大部分来自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; @Override protected 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); } @Override public 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 { @Override public 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(){ @Override public 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 { @Override public 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(){ @Override public 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 文件。
退回到 C:\Users\huaxue\workspaceTW_XT\UnityTest\bin\classes ,在这个目录执行命令 jar
-
cvf
class
.jar
*
这个命令把所有的class文件打包到了class.jar 。其实jar也是和rar一样的压缩文件。我们用winrar打开class.jar。看看里面的路径是不是正确的。
转到Unity。
新建Unity项目,我这里名字是UnityAndroid。
以下步骤不能修改。
在Assets下新建Plugins/Android文件夹。
将Android工程目录下面所有文件除bin、.settings、src这三个目录,都拖到Android文件夹。
在Android新建 bin 目录,把命令生成的class.jar拖进来。
OK,项目部署完成。下面开始Unity代码 Test.cs
using UnityEngine; using System.Collections; public class test : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void 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"); } } }
下面就可以build成Android工程了,不过还要设置Android SDK的路径。
在Unity主菜单 Edit->Preference ->External Tools->Android SDK Location 。选择SDK的路径,例如我的 E:\SDK\adt-bundle-windows-x86\adt-bundle-windows-x86\sdk
然后File->Build Settings ->Android ->Player Settings,在右侧Inspector 窗口,Per-Platform Settings->Other Settings -> Identification 。Bundel Identifier一定和Android包名一样。下面的Bundle Version也设置为一样的。
然后Build。。。。。。。
Over