Google

2012年9月3日月曜日

Unityでコインゲー開発;XCodeのエラー

続き。
コインゲーにてプラグインを自前で書いた際にはまった罠の話です。

UnityからiOSのプラグインを呼び出す際の制約はあちこちで書かれているので、それらに準拠すれば問題はあまり出ません。

が、先日のPaymentPluginのような*.a系のファイルや他のFWが重なった際、あまり知られていないエラーに遭遇してしまいました。
細かく書くと特定されるのでアレですが、画面はこんな感じ。


これもまた面倒な話で、組み合わせやXCodeのバージョンによっては不安定な動きとなり、エラーが出たり通ったりします。
あまりに不安定で、どのバージョンとの組みわせでこう、といった検証まではできていませんでした。
幾つか試した環境は以下ですが、全て発生しました。

 MacOSX Lion
 XCode4.2〜4.3系
 Unity3.4.x〜3.5.x系

しかし抽象的すぎる話ではネタにもならないので、回避方法だけを書いておきます。
なにかあった際の手段のひとつとして記憶に留めてください。

下のSSは以前も画面で出したネイティブコード側のソースをXCodeに吐き出した際のものです。
C関数だらけのプラグインはmm形式で記述するのが通例です。


UnityでPlugins/iOSの下にファイルを置くと、XCodeに変換された際Librariesの下にそのまま配置されることになります。
が、これが怪しいコンパイルエラーを引き起こす時があります。
そんな時はまずそのファイルを選択しましょう。
選択時のプロパティ画面が以下。


File TypeがデフォルトでObjective-C++と解釈されています。
ビルドシーケンスが明確になっていないのか、XCodeに割り当てる順番が原因なのか、この判定が問題みたいでした。
解決の操作は以下。

C++ではなくCで、かつ先行コンパイル対象としてあげます。
これだけで先ほどのエラーが綺麗に消えます。
XCode上に配置するファイルの順番はUnityが勝手に決めるので、後はaファイルの位置ぐらいだろうと思うのですが、aファイルもプロジェクトの最上段に設置しないとこれまた怪しい現象が出たりしました。

しかしUnityから吐き出すと当然のごとくこの設定が消えてしまうので、毎回この修正を行ってから実機転送する必要があります。
うーん、コインと全く関係無い話にずれてばっかりですみません。

次回は少し戻って3Dコインゲームでの2D管理の話にします。

0 件のコメント:

コメントを投稿