2012年05月10日

[Unity] Android用プラグインでリソース参照エラー(Resources$NotFoundException)が出たときの対処法

これまでずっとハマっていた問題がやっと解決しました。
現象としては、UnityでAndroid用プラグインを使うときに、リソースを参照するところで
以下のようなエラーが出るというもの。

android.content.res.Resources$NotFoundException: Resource ID #0x7f03000c

もとになったコード↓

View v = this.getLayoutInflater().inflate(R.layout.main, null);

「R.layout.main」には値はちゃんと入っていることは確認できたのに、なぜかエラーになる。
色々調べてみたら、「R.layout.main」を使っていること自体がダメらしい。

Unityフォーラム↓
http://forum.unity3d.com/threads/81943-Resource-Not-Found

代わりに、「Activity.getResources().getIdentifier()」を使うと良いということで先ほどのコードを修正↓
------------------------------------------------
private Resources r;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
【省略】
r = getResources();
View v = this.getLayoutInflater().inflate(
r.getIdentifier("main", "layout", Global.mainActivity.getPackageName()), null);
【省略】
------------------------------------------------

これでうまくいきました。
Android SDKだけで作ったアプリだったら「R.layout.main」の記述でうまくいったのになぁ。
これは気づかなかった。

フォーラムが活発だと、こういう困ったときに助かります!
posted by be-style at 00:40| Comment(2) | Unity
この記事へのコメント
すみません、上記の書き方を試した場合、コンパイルの時点でGlobalがないとされてエラーになるのですが、Globalはどこで定義しているのでしょうか?
Posted by OROCHI at 2014年04月03日 14:55
コメントありがとうございます。
Globalという独自に作ったクラスをそのまま掲載していました^^;

指摘いただいた点は、自らのパッケージ名を取得するところなので、

Global.mainActivity.getPackageName();

getPackageName();

と変更してみてはいかがでしょうか。

【参考】
http://developer.android.com/reference/android/content/Context.html
Posted by be-style at 2014年04月03日 15:46
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]