UnityとAndroidを上手く付き合わせる方法~UnityPlayerActivityの拡張(1)
つい先日からUnityの開発を始めた者です。
この記事では、UnityでのAndroidアプリケーションの開発において「Android独自のアクションを呼び出す方法」を自分が忘れないように残しておくためのものですよ…!
・AndroidStudio側の処理
手順は、
[Add No Activity]でProjectの作成
↓
UnityPlayerActivityが使えるようにjarファイルのパスを通す
↓
UnityPlayerActivityをextendsしたjavaクラスの作成
↓
build.gradleにjarの出力を行う文を書く
↓
ボタンをぽちっと押してjarの出力!
こんな感じ!(だったと思う...
・Projectの作成
[New Project]で行えますので割愛!
・UnityPlayerActivityが使えるようになる魔法のjarの居場所について
[Unityをインストールしたディレクトリ\Unity\Editor\Data\PlaybackEngines\androidplayer\release\bin]
ここにclasses.jarがあるので、このjarを[File]->[Project Structure]の[Dependencies]に追加してください。
・UnityPlayerActivityをextendsしたjavaクラスの作成
先ほど作成したProjectにjavaクラスを作成します。
今回は「MainActivity.java」とします。
ソースとしてはこんな感じになります。
package あなたのパッケージ名; import android.os.Bundle; import com.unity3d.player.UnityPlayer; import com.unity3d.player.UnityPlayerActivity; public class MainActivity extends UnityPlayerActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } public void showToast(){ final Activity activity = UnityPlayer.currentActivity; activity.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(activity, "Hello world!", Toast.LENGTH_SHORT).show(); } }); } }
Activityを作成したので"AndroidManifest.xml"を編集します。
"Aplication"タグ内に
<activity android:name="MainActivity" android:label="あなたの好きなアプリ名" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
を追加します
AndroidのActivityとほぼほぼ一緒だと思います。
ただ違うところはextendsしているのが "UnityPlayerActivity" というところです。
今回はUnityのスクリプト側から "showToast()" を呼び出してToastの表示を行おうと思うので記載。
(runOnUiThreadはhandlerでも良かったのかな...?)
とりあえずこの形で大丈夫。
・build.gradleにjarの出力を行う文を書く
app内のbuld.gradleの編集
ソースはこちら
apply plugin: 'com.android.library' android { compileSdkVersion 21 buildToolsVersion '20.0.0' sourceSets { main { java { srcDir 'src/main/java' } } } defaultConfig { minSdkVersion 16 targetSdkVersion 17 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile files('libs/classes.jar') } task exportJar(type: Copy) { from('build/intermediates/bundles/release/') into('release/') include('classes.jar') rename('classes.jar', 'AndroidPlugin.jar') } exportJar.dependsOn(deleteOldJar, build)
"apply plugin"が'com.android.library'なので注意!(普段は'com.android.applecation'だったはず...)
下部にある"task exportJar(type: Copy)"が追加文。
・ボタンをぽちっと押してjarの出力!
さっき作ったいわゆるgradleTaskを実行してあげてjarの出力を行う。
私の場合はAndroidStudioの画面の右側に"gradle"という項目があるので、そこをクリック
そうすると、こんなタブメニューが出てくるはず
そこのgradleのマークをクリックするとこんなポップアップが出てくる
"Comand line"に先ほど作成した"exportJar"が選択されているのを確認してから"OK"を押す。
そうすると"プロジェクトのディレクトリ\app\release"の中に"AndroidPlugin.jar"が出力されていると思います。
後に、このAndroidPlugin.jarとAndroidManifest.xmlを使ってUnityに取り込みます。
これでAndroid側の処理は終了です。
次の記事ではUnityのC#側からの呼び出しを取り上げたいと思います。
参考サイト