UnityでAndroidの機能を拡張する2つの手法とはUnityで楽々スマホ用3Dアプリ開発入門(2)(3/3 ページ)

» 2011年07月04日 00時00分 公開
[佐藤大介グリー株式会社 メディア開発本部]
前のページへ 1|2|3       

【1】UnityPlayerActivityライブラリプロジェクトの生成

 Unityで適当な新規プロジェクトを作成し、ビルド対象をAndroidに設定した後、ビルドを行います。すると、作成したプロジェクトのフォルダ内に「Temp」というディレクトリが作成され、その下に「StagingArea」というフォルダが生成されます。

 StagingAreaフォルダをEclipseから参照可能な適当なディレクトリにコピーしてください。

図10 /Temp/StagingArea/の中身 図10 /Temp/StagingArea/の中身

 次に、Eclipseで新規に「Android Project」を作成します。[New Android Project]ダイアログが表示された際[Create Project from existing source]を選択し、先ほどコピーした「StagingArea」フォルダを指定してください。

図11 「StagingArea」フォルダを指定 図11 「StagingArea」フォルダを指定

 [Build Target]を選択し、[Finish]ボタンを押します。

図12 [Build Target]を「Android 2.2」に 図12 [Build Target]を「Android 2.2」に

 すると以下のように、「UnityPlayerActivity」というプロジェクトが[Package Explorer]内に表示されます。

図13 自動ビルドに設定している場合は、コンパイルエラーが出る場合もあるが、無視してよい 図13 自動ビルドに設定している場合は、コンパイルエラーが出る場合もあるが、無視してよい

 次に、UnityPlayerActivityプロジェクトのプロパティを変更します。プロパティウィンドウを開き、項目「Android」を選択すると、「Library」というフィールドがあり、[Is Library]というチェックボックスがあります。これをチェックし、[OK]ボタンをクリックしてプロパティウィンドウを閉じます。

図14 [Properties for UnityPlayerActivity]ダイアログ 図14 [Properties for UnityPlayerActivity]ダイアログ

 以上で、UnityPlayerActivityライブラリプロジェクトの生成が完了です。

【2】新規Androidプロジェクトの生成

 準備として、UnityPlayer用ライブラリJARファイルを適当なディレクトリにコピーします。

  • Windowsの場合
    【Unityインストールディレクトリ】\Editor\Data\PlaybackEngines\androidplayer\bin\classes.jar
  • Macの場合
    /Applications/Unity/Unity.app/Contents/PlaybackEngines/AndroidPlayer/bin/classes.jar

 次に、新規でAndroidプロジェクトを生成します。ここで生成するプロジェクト内にUnityPlayerが取り込まれ、APKファイルとしてビルドされるので、プロジェクト名やパッケージ名は、そのつもりで指定してください。

 なお、パッケージ名はUnityにおけるビルド設定での「Bundle Identifier」と同じである必要があるので、注意してください。ここでは「UnitySample}という名前のAndroidプロジェクトを生成しています。各欄を入力後[Finish]ボタンを押してプロジェクトを生成します。

図15 [New Android Project]ダイアログ 図15 [New Android Project]ダイアログ

 次に、生成されたUnitySampleプロジェクトのプロパティを開きます。項目[Android]を開き、[Library設定]欄にて[Add...]ボタンを押し、生成したUnityPlayerActivityプロジェクトを選択して追加します。これにより、Unityの実行に必要なコードがUnitySampleプロジェクトに取り込まれるようになります。

 それからUnityPlayerに必要なライブラリJARファイルをインクルードさせるために、プロパティウィンドウの[Libraries]タブを開きます。[Add External JARs...]ボタンをクリックし、最初にコピーした「classes.jar」ファイルを追加します。

図16 [Properties for UnitySample]ダイアログ 図16 [Properties for UnitySample]ダイアログ

 選択後、[OK]ボタンを押してプロパティを閉じます。

図17 [Prject Selection]ダイアログ 図17 [Prject Selection]ダイアログ

 以上でプロジェクト生成終了です。

【3】Unityアプリコードのコピー

 UnitySampleプロジェクトの「assets」フォルダに、前に生成したライブラリプロジェクト「UnityPlayerActivity」プロジェクト内の「assets」フォルダの中身「bin」「libs」をドラッグ&ドロップで移動します。すると下記のようなフォルダ構成になると思います。

図18 UnitySampleプロジェクトの「assets」フォルダに「bin」「libs」フォルダ 図18 UnitySampleプロジェクトの「assets」フォルダに「bin」「libs」フォルダ

 このassetsフォルダ内のbinフォルダ内がUnityで作成したプログラム本体が含まれるフォルダです。Unityでアプリを開発し、再ビルドした際はUnityのプロジェクトフォルダにある「Temp/StagingArea/assets/bin」フォルダを当該フォルダにコピーして上書きすることでアップデートされます(上書きの後、Eclipse上でのプロジェクトの再読み込みを忘れないでください。でないと、Eclipseが新しいファイルを認識しません)。

図19 「Temp/StagingArea/assets/bin」フォルダを、UnitySampleプロジェクトの「assets/bin」に上書き 図19 「Temp/StagingArea/assets/bin」フォルダを、UnitySampleプロジェクトの「assets/bin」に上書き

【4】メインActivityでのUnityPlayerActivityの継承

 次に、メイン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を追加して、それを呼び出すようなことも可能です。

【5】AndroidManifest.xmlの変更

 AndroidManifestの変更は通常のAndroidプロジェクトと同じく、作成したUnitySampleプロジェクト内に含まれる「AndroidManifest.xml」を編集すればOKです。

【6】Eclipseでビルド

 最後に、通常のAndroidアプリ開発時と同じく、Eclipseでビルドします。APKファイルが生成され、エミュレータまたは実機に転送され、Unityで作成したアプリが実行されると思います。

次回は、UnityでBluetooth制御&Twitter4j連携

 このように、Unityが提供しているネイティブコードとの連携手段についてサンプルコードを交え解説しましたが、いかがでしたでしょうか。Android端末に特化した機能を自由に拡張できることが、ご確認いただけたかと思います。

 ぜひ、この便利な開発環境を試していただき、効率的で品質の高い3Dアプリ開発を実感してみてはいかがでしょうか。

 次回こそは、今回の応用編として、BluetoothなどデバイスとUnityの連携や、JavaライブラリとUnityの連携についても解説しますので、お楽しみに。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。