いう謎の症状を2度経験したので、今回はそれについて検証してみたいと思います。そもそもDetonatorはiOSでの動作をサポートしていないということではありますが、今回はやむを得ないのでそれを踏まえた上で原因追求しています。環境は、MacOSX10.8.4。Unityは4.2、Xcodeは4.6.3。Unityのライセンスは、現在はUnityさんにインターンシップ用で頂いたイベント用ライセンスを使わせて頂いています。実機のほうはiPhone4SとiPodTouch第5世代で試しておりどちらもiOS6(同じ症状が出るので実機の違いは症状には関係ないと思われる)。実例1)シーン上に配置されているCylinderのオブジェクトにボールが衝突(OnCollisionEnter)したときにInsitantiateでDetonatorに用意されているプレハブが生成され爆発が発生する。OSX上では爆発が確認できるのにiOSで動かそうとすると爆発しない。実例2)上とほとんど同じ。元々はCubeをTriggerにしてOnTriggerEnterしたときにInstantiateするような書き方だった、がiOSでは爆発せず。Detonator-Baseのプレハブをシーン上へ置いただけというふうに変更してみたり、他のアセットやオブジェクトを全部なくしてみたりと色々と試したが治らなかった。実例1の時には結局Detonator自体を削除してもう一度インポートすれば解決したが、実例2の際にその方法を試したときは解決しなかった。MaterialのShaderうんぬんのところでNullReferenceExceptionが出ていることが分かる。マテリアルとかが存在しないというようなエラーだと思われる。Material()ができていないのか、Shader.Findが失敗しているのか?今回はDetonatorのプレハブを設定等をいじらず使っていたので(ただ今回はインターンに参加された学生さんたちの作るゲームで発生したものなので、いじっていないのかどうかは定かではない)、FireballAMaterialをはじめとしたマテリアルのところには何も設定をしておらず、そのためこのDefaultFireballAMaterial()、FireballBMaterial()、SmokeAMaterial()...(以下略)はSystemのデフォルトのマテリアルが使われることになっていた。解決策Default〜がダメだったら、プレハブにマテリアルを直接指定してDefault〜の中でマテリアルを作らせなければいいのではないかと思ったら、それで良かったらしく、一応iOSでも爆発するようになった。Emitters→Materialsフォルダの中にマテリアルが用意されていた。それをプレハブのInspectorのところで設定した(図2)。HeatwaveはProのみの機能だそうなので設定していない。PCでは動くのに実機ではそれが反映されないのか...。他人が作ったものではどうしてこのバグが発生するようになったのかがはっきりと分からないので、自分でその状況を作るべく色々試してみることにする。(手順)【1】プロジェクトを作成し、シーンをAssetsフォルダ直下へ保存しておく。【2】DetonatorをAssetStoreからインポート。場所はAssetsフォルダ直下。Sceneは最初からインポートに含まずチェックを外しておく。SettingはIgnoreにしている。Currentで現在のシーンを追加してiOS向けにビルドさっそく例のエラーが出た。【6】オブジェクトに適用させたスクリプトでInstantiateさせるようにしてみるインターンのカリキュラムではCubeオブジェクトにスクリプトを当ててそのスクリプト中でInstantiateし爆発させる方法をとっていたので、一応そちらでも試す。書いたスクリプトは以下のとおり(Explosion.cs)。}}そのままHierarchyへ放り込んであったDetonator-Baseのプレハブを削除。TypeにはDetonator-Baseを設定しておく。Explosion.csを適用させたオブジェクトが(というかその位置で)爆発するといった感じの書き方になっている。Startの時だけInstantiateしても良かったが、最初の1回だけだとiOSへビルドしたときに爆発したかどうかよく見忘れてしまうので5秒おきに爆発するようにしてある。エラーが出るままだった。【7】他のDetonatorのプレハブを試すBombTypeを他のものに変えて試してみた。ら、これがちゃんとiOSでも爆発するものとしないものがあることに気づいた。ちなみにうまくいかないものは以下のプレハブ。どれもMacOSX上では動作することを確認している。Heatwaveは試していない。【8】各プレハブに関連付けられているスクリプトを比べるこのスクリプトの何かがいけないのではないかと見てみたが、特にそういうわけではなさそうだった。いえば大丈夫だったほうはSimple以外Sprayがついており、ダメだった方はSpray以外Sprayがついていないというのはあったけれど...。いうよりBaseとSimpleは同じDetonator.csの基本のファイルしかついてないみたいなので、この設定内容の違いなのではないだろうか、と。【9】BaseとSimpleのDetonatorの設定内容を比べるSimpleの方にはDirectionの中で全てSparksが設定されている(左)。Baseの方は全てNone(右)。他のものも見てみたが、Detonatorスクリプトの中でマテリアルが指定してあるものは他にない。【10】Simpleのコピーを作ってみて設定をBaseに近づけて動かなくなるか試すちゃんと動いていたDetonator-Simpleプレハブを複製してDetonator-Simple_copyとし、それをCubeのExplosionスクリプトのBombTypeに適用させることで実験してみる。大きな違いである、Derectionのところに設定してあるSparksマテリアルを全て外してみる。