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;@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 文件。
退回到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 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
然后File->Build Settings ->Android ->Player Settings,在右侧Inspector 窗口,Per-Platform Settings->Other Settings -> Identification 。Bundel Identifier一定和Android包名一样。下面的Bundle Version也设置为一样的。
然后Build。。。。。。。
Over
更多相关文章
- eclipse中无法新建Android工程 出现问题:Plug-in org.eclipse.ajd
- Android Studio中debug和release模式默认的参数配置
- android ksoap2 中把XML(DataSet) 当做参数传递
- Android intent.Action 参数值及对应功能介绍
- intelliJ IDEA 创建maven android工程的方法
- Android工程中R.java文件的重新生成——(注意资源文件的错误)