UnityとAndroidネイティブの連携 の投稿一覧
UnitySendMessageの引数を使う
UnityからネイティブのActivityを呼び出す[part2]
UnityからネイティブのActivityを呼び出す[part1]
UnityPlayerNativeActivityの拡張Activityに定義したstaticなメソッドを呼び出す
JavaClassの呼び出し
UnityからネイティブのActivityを呼び出す[part2]
UnityからネイティブのActivityを呼び出す[part1]
UnityPlayerNativeActivityの拡張Activityに定義したstaticなメソッドを呼び出す
JavaClassの呼び出し
今回は、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を呼び出した時点でアプリが落ちてしまいます。