青空の月

Unity, C#, アプリ開発関連について。

Unityに負荷をかける

Unityで負荷かけたいと言われちょっと調べたけど見当たらなかったので試しに作ってみた。

Unityは非同期処理のコルーチンとかあるけど、Unityはシングルスレッドなのでコルーチンももろにアプリに影響が出るので、別スレッドで処理させるようにもしてみた。

1回の計算数と作成するスレッド数は試す環境によって変わってくるので徐々に増やして見たほうが良い。

f:id:masa795:20130811170519j:plain

 

 

コルーチンver

コルーチンで動作させた時。プロファイラーを見るとScriptでめっちゃがんばってるのがよく分かる。

f:id:masa795:20130811171017j:plain

 

タスクマネージャー上だとよく分からない。

f:id:masa795:20130811171152j:plain

 

 

 

別スレッドver

別スレッドで動かした時。プロファイラー上ではよく分からない。Unityとは別のスレッドで動いてるはずなのでプロファイラー上で負荷が上がってないのは期待値通り。

f:id:masa795:20130811171246j:plain

 

タスクマネージャー上ではいくつかのCPUで一気に使用率が上がった。上手い事別スレッド(別CPU)で処理が分散されて負荷がかかった。同時に作成するスレッド数を増やしていけばCPU不足状態を再現できそう。

f:id:masa795:20130811171322j:plain

 

 

ちなみに平常時(Unity起動状態)はこんな感じだった。

f:id:masa795:20130811171106j:plain

 

 

AddStress.cs

適当なゲームオブジェクトにアタッチするだけ。

負荷になるような重い処理がよく分からなかったのでとりあえずMathクラスを使って計算させてみた。

重い処理と言われてるRaycastをたくさん飛ばしたりもしてみたけどRaycastだとメモリも上がってしまうのでやめておいた。

CustomAddStress.cs

Inspector拡張なのでEditorフォルダ配下に入れる。