Unity Tips を6つ追加しました

まだ Tips の数が少ないので最初のうちは基本的なものを中心に上げていきますが、時折役に立つ小技的なものも間に挟んであげていこうかと思います。

今回は Unity UI 中心です。まだゲームが作れるような Tips はありませんが今後随時追加していこうかと思います。

Unity Tips 一覧

[XNA] 別々のスレッドで ContentManager を使用して同じコンテンツを同時に読み込もうとすると例外が発生する

ユーザーの操作レスポンスを改善するためにバックグラウンドでコンテンツを読み込む際、複数のスレッドから同時にコンテンツを読み込もうとすると例外が発生します。

例えば以下のようにプログラムを組むと現象を確認できます。

worker = new BackgroundWorker();
worker.DoWork += (sender, args) =>
  {
    texture = Content.Load("Bitmap");
  };
worker.RunWorkerAsync();
texture = Content.Load("Bitmap");

 

例外が発生するか所は実行タイミングによってメインスレッドであるかバックグラウンドであるかはまちまちです。場合によっては例外が発生しない場合もあります。そのため、原因がわかりにくいエラーになりやすいので注意しましょう。

ちなみに Windows Phone 環境では例外のメッセージが「ArgumentException(Value does not fall within the expected range.」となっており解釈しにくいメッセージになっていますが、Windows 環境では「同一のキーを含む項目が既に追加されています。」と表示されます。コンテンツが完全に読み込まれるまではディクショナリに追加されないので、同時に2つ追加しようとして発生するエラーのようですね。

]]>