はじめてのUnity 【番外編 Unity起動時のエラーとその対処法】
はじめてのUnity 【番外編 Unity起動時のエラーとその対処法】
Unity起動時のエラーとその対処法
この記事は、Windows8.1環境におけるUnity4起動時のエラーと、その対処法について記載しています。
以前、Unity4を使用する環境を変更した際、起動時にエラーが出るようになってしまいました。
原因はセキュリティソフトだったのですが、Unityの公式にのっている対策法では解決しませんでした。
セキュリティソフトをアンインストールすれば問題なく動作しましたが、それは最後の手段にしたかったので、別の方法を探してみようと思いました。
対策方法を調べてみると、起動時に起こるエラーにもいろいろあることがわかりました。
今後のエラー対策も兼ねて、今回は起動時にエラーを起こし得る要素と、その対策方法についてまとめておこうと思います。
今回起きたエラー
今回起きたエラーは新規プロジェクトを立ち上げようとすると、下図のようなGetThreadContext failed というエラーメッセージとともに、
プログラムがクラッシュしてしまうというものでした。
フリーズしてしまうため、OKボタンも押せません。
エラーが起きた時の環境は以下の通りです。
PC: MacBook Pro (Boot Camp)
OS: Windows8.1(x64)
Unity: 4.5.3f3 (無料版)
考えられる原因
エラーの原因として考えられるものに、以下のものがあります。
① 一部のセキュリティソフトとの相性の問題
② Microsoftアカウントのユーザー名が日本語になっている
③ DirectXの問題
④ その他(Windows8/8.1による問題)
公式サイトや、他のUnityユーザーにより報告されたエラーも、大抵これらの理由によるものでした。
対策① セキュリティソフトとの相性が悪い場合
ESET Smart Security やAvast など、一部のセキュリティソフトとの相性が悪いために、Unityが起動できない場合があります。
必ず起きるわけではなく、OSの種類やセキュリティソフトの組み合わせでエラーが発生する可能性があります。
Unityをセキュリティ対象から除外すると動く場合があるので、設定を入れてみましょう。
セキュリティソフトに除外設定を入れる方法は、ESETの場合、ソフト画面から詳細設定を選びます。
詳細設定を開いたら、コンピュータ > ウィルス・スパイウェア対策 > 除外 と選択。
ここで、Unityのプログラムがあるフォルダのパスを登録します。
これでUnityがセキュリティソフトの対象から除外されます。
私の場合はこの方法でも解決しませんでしたが、有効なケースもあるようなので、試してみて下さい。
対策② アカウントのユーザー名が日本語になっている場合
これは結果としては今回のエラーとは無関係でしたが、よく起こるエラーのようです。
Unityのアカウントを日本語で作成してしまった場合や、Windows8/8.1でアカウントを日本語で作成してしまった場合、
Unity側でプログラムまでのパスを読み込んでくれなかったり、起動時の認証に失敗するようです。
公式でもアルファベットのユーザー名の使用を推奨していますので、当てはまる方は試してみてください。
対策③ DirectXの問題
これも今回のケースとは違うエラーですが、Windows8/8.1の環境で起動時に起こりやすいようです。
起動時にDirectX 11を使うモードになっていない場合、このエラーとなるようなので、DirectX 11モードで起動するようにオプションをつけます。
- まず、Unity のインストールディレクトリにある Unity.exe へのショートカットを作成します。
- ショートカットのプロパティを開き、リンク先(T):の最後に、「 -force-d3d11 」 を追加します。
- 適用(A)を押す。
設定が終わったら、作成したショートカットからUnityを起動してみてください。
ちゃんと起動すれば、ウインドウの上部にDX11と書いてあるはずです。
対策④ その他の解決方法
①~③で解決しなかった場合、特に①でセキュリティソフトにパスを通してもエラーが出てしまう場合は、
Windowsのテストモードを試してみてください。
Windows8/8.1では署名のないドライバーなどがインストールできなかったり、正常に動作しなかったりします。
テストモードで動作させると、署名のないドライバーも動くようになるため、エラーが回避される可能性があります。
- まず、コマンドプロンプトを管理者として実行します。
プログラムを右クリックして、管理者として実行を選択する。
コマンドプロンプトの右クリックメニュー - コマンドラインに、
「 bcdedit -set testsigning on 」
と書いてエンターを押します。
管理者として実行したコマンドプロンプト - 操作を正しく終了したのを確認できたら、PCを再起動します。
PCが立ち上がって、デスクトップの右下にテスト モードの表示が出れば成功です。
テストモード時の表示(デスクトップ右下)
私の場合、そもそもESETが原因だと思われるので、何かしらの許可されていないものがESETに引っかかっているのではないかと思い、この方法も試してみました。
結果として、たまに正常に動くようになりました。ですが、やはり根本的な解決には至りませんでした。
最後に (とりあえずエラー回避方法を発見)
上記の方法をすべて試したところ、プロジェクトの初回起動時のエラーは消えませんでした。
(たまたま正常に起動すると、その後はそのプロジェクトであれば起動する。)
その後、偶然見つけたのですが、ネットワークを切断しているとエラーが起きないことがわかりました。
どうやらUnityが起動時に、裏側で通信を行っているらしく、その通信がファイヤーウォール回りで弾かれていたようです。
しかし、ESETにファイヤーウォールの除外設定を入れても駄目で、ポートを開放しても駄目。
(ESETが入っていない状態でもファイヤーウォールから通知が来ますが、この場合は設定を入れると通る。)
結局のところ、後にも先にもESETとの相性が悪いんですね。
他の対策法がわかるか、セキュリティソフトを交換できるまでは、プロジェクトの初回起動時だけ、ネットワークを切断することでエラーを回避しようと思います。
最後までお読みいただきありがとうございます。
← Unityの記事一覧にもどる
ゲーム制作関連のオススメ連載リンク
とっても手軽なゲーム制作体験!
Unityゲーム開発基礎
実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発