UnityとAndroidネイティブの連携:UnityからネイティブのActivityを呼び出す[part2]

UnityとAndroidネイティブの連携 の投稿一覧

今回は、AndroidネイティブのActivity呼び出し後にResourceファイルを使用する場合の実機検証を行いました。

環境

  • OSX Yosemite v10.10.4
  • Unity v5.1.2f1
  • AndroidStudio v1.3.1
  • 検証端末 Nexus7(2012) v5.1.1

Androidそのままで動作させる際は R.hoge.moge といった記述をするだけで良いところが、UnityからAndroidプラグインを使用する場合では上手くいきません。
具体的には
android.content.res.Resources$NotFoundException: Resource ID #0x0
のように、リソースの参照エラーとなります。
これを回避するには、Androidそのままで動作させる場合と比較して2点修正することになります。

修正点1:javaファイルの記述を変更する

先述の通り、R.~~ が使用できません。代替の記述としてgetIdentifier()を使用します。
下記は、AndroidLibraryモジュールのBlankActivityを生成したものを必要な箇所修正した例です。

public class ResTestActivity extends Activity {

    private Resources r;
    private String packageName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        r = getResources();
        packageName = getPackageName();
        setContentView(r.getIdentifier("activity_res_test", "layout", packageName));
    }
/*以下略*/

修正点2:resディレクトリをUnityプロジェクト内に配置する

UnityプロジェクトのAndroidプラグイン配置先、~/Assets/Plugins/Android直下にresディレクトリをそのまま移植するだけでokです。

実行例

前回の記事のプロジェクトを利用して、Unityボタンを増やし起動検証を行いました。
もし修正が不十分な場合、ボタンを押した = Activityを呼び出した時点でアプリが落ちてしまいます。
test1 test2

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

はじめまして、秋月なるです。
アラフォー会社員で、スマホアプリ/ゲーム/AIが好き。新しいものを見ると触りたくなるタイプで、スマホやウェアラブル等ガジェットが好きですが、よく買ったあとに「思ってたのと違う…」をやりがち。
ブログ投稿は趣味の1つなので、ゆるく続けていこうと思います。

目次