Unityで適当な新規プロジェクトを作成し、ビルド対象をAndroidに設定した後、ビルドを行います。すると、作成したプロジェクトのフォルダ内に「Temp」というディレクトリが作成され、その下に「StagingArea」というフォルダが生成されます。
StagingAreaフォルダをEclipseから参照可能な適当なディレクトリにコピーしてください。
次に、Eclipseで新規に「Android Project」を作成します。[New Android Project]ダイアログが表示された際[Create Project from existing source]を選択し、先ほどコピーした「StagingArea」フォルダを指定してください。
[Build Target]を選択し、[Finish]ボタンを押します。
すると以下のように、「UnityPlayerActivity」というプロジェクトが[Package Explorer]内に表示されます。
次に、UnityPlayerActivityプロジェクトのプロパティを変更します。プロパティウィンドウを開き、項目「Android」を選択すると、「Library」というフィールドがあり、[Is Library]というチェックボックスがあります。これをチェックし、[OK]ボタンをクリックしてプロパティウィンドウを閉じます。
以上で、UnityPlayerActivityライブラリプロジェクトの生成が完了です。
準備として、UnityPlayer用ライブラリJARファイルを適当なディレクトリにコピーします。
次に、新規でAndroidプロジェクトを生成します。ここで生成するプロジェクト内にUnityPlayerが取り込まれ、APKファイルとしてビルドされるので、プロジェクト名やパッケージ名は、そのつもりで指定してください。
なお、パッケージ名はUnityにおけるビルド設定での「Bundle Identifier」と同じである必要があるので、注意してください。ここでは「UnitySample}という名前のAndroidプロジェクトを生成しています。各欄を入力後[Finish]ボタンを押してプロジェクトを生成します。
次に、生成されたUnitySampleプロジェクトのプロパティを開きます。項目[Android]を開き、[Library設定]欄にて[Add...]ボタンを押し、生成したUnityPlayerActivityプロジェクトを選択して追加します。これにより、Unityの実行に必要なコードがUnitySampleプロジェクトに取り込まれるようになります。
それからUnityPlayerに必要なライブラリJARファイルをインクルードさせるために、プロパティウィンドウの[Libraries]タブを開きます。[Add External JARs...]ボタンをクリックし、最初にコピーした「classes.jar」ファイルを追加します。
選択後、[OK]ボタンを押してプロパティを閉じます。
以上でプロジェクト生成終了です。
UnitySampleプロジェクトの「assets」フォルダに、前に生成したライブラリプロジェクト「UnityPlayerActivity」プロジェクト内の「assets」フォルダの中身「bin」「libs」をドラッグ&ドロップで移動します。すると下記のようなフォルダ構成になると思います。
このassetsフォルダ内のbinフォルダ内がUnityで作成したプログラム本体が含まれるフォルダです。Unityでアプリを開発し、再ビルドした際はUnityのプロジェクトフォルダにある「Temp/StagingArea/assets/bin」フォルダを当該フォルダにコピーして上書きすることでアップデートされます(上書きの後、Eclipse上でのプロジェクトの再読み込みを忘れないでください。でないと、Eclipseが新しいファイルを認識しません)。
次に、メインActivityをUnityが実行できるように、Activityの継承クラスからUnityPlayerActivityの継承クラスに変更します。生成直後は下記のようなコードになっていると思います。
package com.example.sample; import android.app.Activity; import android.os.Bundle; public class UnitySampleActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
これを次のように、継承クラスを「Activity」から[UnityPlayerActivity」クラスに変更し、setContentView()を削除します。
package com.example.sample; import com.unity3d.player.UnityPlayerActivity; import android.os.Bundle; public class UnitySampleActivity extends UnityPlayerActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } }
UnityPlayerActivityはベースにActivityクラスを継承しているので、このActivityを通常のActivityと同じように変更することで自由なコード開発が可能になります。もちろん、他にActivityを追加して、それを呼び出すようなことも可能です。
AndroidManifestの変更は通常のAndroidプロジェクトと同じく、作成したUnitySampleプロジェクト内に含まれる「AndroidManifest.xml」を編集すればOKです。
最後に、通常のAndroidアプリ開発時と同じく、Eclipseでビルドします。APKファイルが生成され、エミュレータまたは実機に転送され、Unityで作成したアプリが実行されると思います。
このように、Unityが提供しているネイティブコードとの連携手段についてサンプルコードを交え解説しましたが、いかがでしたでしょうか。Android端末に特化した機能を自由に拡張できることが、ご確認いただけたかと思います。
ぜひ、この便利な開発環境を試していただき、効率的で品質の高い3Dアプリ開発を実感してみてはいかがでしょうか。
次回こそは、今回の応用編として、BluetoothなどデバイスとUnityの連携や、JavaライブラリとUnityの連携についても解説しますので、お楽しみに。
Copyright © ITmedia, Inc. All Rights Reserved.