目次

088 UnityスクリプトからAndroidActivityを切り替える

概要

Unity のカレントアクティビティを取得し、Unity側からAndroidのActivityを切り替えてみます。

Activityの作成

Eclipse を起動し適当なAndroid アプリケーションを作成します。 プロジェクトの名前は、Activity の名前はCallActivity としました。

さらにファイルを追加し、アクティビティ起動用のクラスを用意しておきます。

Jarライブラリの作成

CallActivity を右クリック → エクスポートからsrc 以下のファイルを選択し、Jarライブラリを作成します。 「このプロジェクトをライブラリとしてマークする」にチェックを忘れずに入れます。

Eclipse 側の準備は終了です。

Unityプロジェクトの作成

AndroidManifest.xml ファイルの編集

Unity でActivityの操作を行うため、専用にAndroidManifest.xml ファイルを編集します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	package="com.hoge.callactivity"
	android:versionCode="1"
	android:versionName="1.0" >
 
	<uses-sdk
		android:minSdkVersion="8"
		android:targetSdkVersion="18" />
 
	<application
		android:allowBackup="true"
		android:icon="@drawable/app_icon"	// <!-- app_iconに変更します。 -->
		android:label="@string/app_name"
		android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >// <!-- Fullscreen に変更。 -->
 
		<!-- ここから -->
		<activity android:name="com.unity3d.player.UnityPlayerProxyActivity"
				  android:label="@string/app_name"
				  android:configChanges="keyboard|keyboardHidden|orientation">
			<intent-filter>
				<action android:name="android.intent.action.MAIN" />
				<category android:name="android.intent.category.LAUNCHER" />
			</intent-filter>
		</activity>
 
		<activity android:name="com.unity3d.player.UnityPlayerActivity"
				  android:label="@string/app_name"
				  android:configChanges="keyboard|keyboardHidden|orientation">
		</activity>
 
		<activity android:name="com.unity3d.player.UnityPlayerNativeActivity"
				  android:label="@string/app_name"
				  android:configChanges="keyboard|keyboardHidden|orientation">
			<meta-data android:name="android.app.lib_name" android:value="unity" />
		</activity>
 
		<activity android:name="com.unity3d.player.VideoPlayer"
				  android:label="@string/app_name"
				  android:configChanges="keyboard|keyboardHidden|orientation">
		</activity>
 
		<!-- ここまで追記 -->
 
		<activity
			android:name="com.hoge.callactivity.MainActivity"
			android:label="@string/app_name" >
		</activity>
	</application>
</manifest>

MainActivityのintent-filterタグは全て削除してください。

Activity 切替えコードの実装

呼び出し用スクリプトを作成します。

using UnityEngine;
using System.Collections;
using System;
 
public class Plugins
{
	// Launch Activity.
	public static void LaunchActivity()
	{
#if UNITY_ANDROID
		// get Unity Player Activity.
		AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
		AndroidJavaObject unityActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
 
		AndroidJavaClass plugin = new AndroidJavaClass("com.hoge.callactivity.Plugin");
		plugin.CallStatic("launchActivity", "com.hoge.callactivity.MainActivity", unityActivity );
#endif	//	#if UNITY_ANDROID
	}
}

これをUnityの任意のスクリプトからPlugins.LaunchActivity() として呼び出してあげればActivity が切り替わります。