Unity发送参数给Android打开TestActivity0、TestActivity1

本文大部分来自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 文件。

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


退回到 C:\Users\huaxue\workspaceTW_XT\UnityTest\bin\classes ,在这个目录执行命令 jar -cvf class.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 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");
		}
		
		
	}
}

直接将它绑定在摄像机中,它用来通知界面打开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


你可能感兴趣的:(android,unity,sdk)