GetThreadContext failed2013年05月20日

こんばんは。

あいかわらず自堕落で無気力な毎日。
大作ゲームをやる気力もわかず、お手軽なインディーズやカジュアルゲームばかり遊んでますw

で、最近たまに遭遇するのがこのエラー

「Fatal error in GC」
「GetThreadContext failed」

ゲームが突然反応しなくなったり、強制終了したりする時に出てくるポップアップ。

Unityエンジンを使ったゲームで、OSが64bitWin(Windows7または8)、さらにAvastなど一部のアンチウィルスソフトの組み合わせでのみ発生します。
環境が限定されるので遭遇する人は少なそうですが、エラーの再原率は高く、対処しない限りそのゲームは永遠にプレイ出来ません。

原因はUnityとアンチウィルスソフトの相性、しかも特定のバージョンどおしが組み合わさった時だけしか発生しません。
なのでアンチウィルスソフトを変えたりするだけでも対処できるのですが、ソフトの入れ替えは面倒ですし、ゲームのためだけに気に入った使用環境を変えるのも億劫。

で、これが手間のかからないスマートな対処方法です


以下のリンクから、Unityの最新ライブラリ(ver4.1)のmono.dllをダウンロード。
ゲームのプログラムのフォルダを調べ、Monoフォルダ下のmono.dllを置き換える。
(念のため置き換え前にバックアップをとっておきましょう)
該当プログラムのフォルダ下を「mono.dll」で検索すればすぐわかると思います。

例)C:\Program Files (x86)\ゲーム名\ゲーム名_Data\Mono

後は普通にプレイすれば、エラーは発生しなくなります。
なお当然のことですが、プログラムの一部を勝手に置き換えるわけですから、動作に予想外の不具合が出る可能性もあります。
対応は自己責任で。


このエラーはUnity開発者はすでに把握済みだったようで、対応する最新ライブラリや開発キットも公開されています。
ですがこれを修正するかどうかはゲームの開発者に一任されます。
大手メーカーと違い、インディーズやカジュアルは規模が小さいためサポートが甘く、発生例の少ないエラーにはなかなか対応してもらえません。このエラーも放置されたままになることがほとんど。

最近勢いのあるインディーズ/カジュアルゲーム、今後も本数は増えると思います。
比例してこういうエラーが起こる例も増えるでしょうが、サポートは大丈夫なのでしょうか。サポート体制を充実させることも、今後の課題だとおもいます。


このエラー、ググってみても日本語の検索結果が出てこなかったので、メモ代わりに書いてみました。
以前紹介したKairoも、この方法でメインPCでも動くようになりました。

ではまた。


参考リンク: