Tips

はじめてのUnity 【番外編 Unity起動時のエラーとその対処法】

はじめてのUnity 【番外編 Unity起動時のエラーとその対処法】

はじめてのUnity 【番外編 Unity起動時のエラーとその対処法】

Unity起動時のエラーとその対処法

この記事は、Windows8.1環境におけるUnity4起動時のエラーと、その対処法について記載しています。

以前、Unity4を使用する環境を変更した際、起動時にエラーが出るようになってしまいました。

原因はセキュリティソフトだったのですが、Unityの公式にのっている対策法では解決しませんでした。
セキュリティソフトをアンインストールすれば問題なく動作しましたが、それは最後の手段にしたかったので、別の方法を探してみようと思いました。

対策方法を調べてみると、起動時に起こるエラーにもいろいろあることがわかりました。
今後のエラー対策も兼ねて、今回は起動時にエラーを起こし得る要素と、その対策方法についてまとめておこうと思います。


今回起きたエラー

今回起きたエラーは新規プロジェクトを立ち上げようとすると、下図のようなGetThreadContext failed というエラーメッセージとともに、
プログラムがクラッシュしてしまうというものでした。
フリーズしてしまうため、OKボタンも押せません。

WS000016

エラーが起きた時の環境は以下の通りです。

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の場合、ソフト画面から詳細設定を選びます。

WS000018

詳細設定を開いたら、コンピュータ > ウィルス・スパイウェア対策 > 除外 と選択。
ここで、Unityのプログラムがあるフォルダのパスを登録します。

WS000019

これでUnityがセキュリティソフトの対象から除外されます。
私の場合はこの方法でも解決しませんでしたが、有効なケースもあるようなので、試してみて下さい。

対策② アカウントのユーザー名が日本語になっている場合

これは結果としては今回のエラーとは無関係でしたが、よく起こるエラーのようです。
Unityのアカウントを日本語で作成してしまった場合や、Windows8/8.1でアカウントを日本語で作成してしまった場合、
Unity側でプログラムまでのパスを読み込んでくれなかったり、起動時の認証に失敗するようです。

公式でもアルファベットのユーザー名の使用を推奨していますので、当てはまる方は試してみてください。

 

対策③ DirectXの問題

これも今回のケースとは違うエラーですが、Windows8/8.1の環境で起動時に起こりやすいようです。
起動時にDirectX 11を使うモードになっていない場合、このエラーとなるようなので、DirectX 11モードで起動するようにオプションをつけます。

  1. まず、Unity のインストールディレクトリにある Unity.exe へのショートカットを作成します。
    WS000020
  2. ショートカットのプロパティを開き、リンク先(T):の最後に、「 -force-d3d11 を追加します。
    WS000021
  3. 適用(A)を押す。

設定が終わったら、作成したショートカットからUnityを起動してみてください。
ちゃんと起動すれば、ウインドウの上部にDX11と書いてあるはずです

対策④ その他の解決方法

①~③で解決しなかった場合、特に①でセキュリティソフトにパスを通してもエラーが出てしまう場合は、
Windowsのテストモードを試してみてください。

Windows8/8.1では署名のないドライバーなどがインストールできなかったり、正常に動作しなかったりします。
テストモードで動作させると、署名のないドライバーも動くようになるため、エラーが回避される可能性があります。

  1. まず、コマンドプロンプトを管理者として実行します。
    プログラムを右クリックして、管理者として実行を選択する。
    WS000031
    コマンドプロンプトの右クリックメニュー
  2. コマンドラインに、
    「 bcdedit -set testsigning on 」
    と書いてエンターを押します。
    WS000033
    管理者として実行したコマンドプロンプト
  3. 操作を正しく終了したのを確認できたら、PCを再起動します。
    PCが立ち上がって、デスクトップの右下にテスト モードの表示が出れば成功です。
    WS000034
    テストモード時の表示(デスクトップ右下)

私の場合、そもそもESETが原因だと思われるので、何かしらの許可されていないものがESETに引っかかっているのではないかと思い、この方法も試してみました。

結果として、たまに正常に動くようになりました。ですが、やはり根本的な解決には至りませんでした。


最後に (とりあえずエラー回避方法を発見)

上記の方法をすべて試したところ、プロジェクトの初回起動時のエラーは消えませんでした。
(たまたま正常に起動すると、その後はそのプロジェクトであれば起動する。)

その後、偶然見つけたのですが、ネットワークを切断しているとエラーが起きないことがわかりました。
どうやらUnityが起動時に、裏側で通信を行っているらしく、その通信がファイヤーウォール回りで弾かれていたようです。
しかし、ESETにファイヤーウォールの除外設定を入れても駄目で、ポートを開放しても駄目。
(ESETが入っていない状態でもファイヤーウォールから通知が来ますが、この場合は設定を入れると通る。)

結局のところ、後にも先にもESETとの相性が悪いんですね。
他の対策法がわかるか、セキュリティソフトを交換できるまでは、プロジェクトの初回起動時だけ、ネットワークを切断することでエラーを回避しようと思います。


最後までお読みいただきありがとうございます。
← Unityの記事一覧にもどる

[Unity_728×90]

ゲーム制作関連のオススメ連載リンク

とっても手軽なゲーム制作体験!
Unityゲーム開発基礎

実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発

Recent News

Recent Tips

Tag Search