なんとかするから、なんとかなる

エンジニア関係のことを書きます

Unite2017 参加しました その6

C#ジョブシステムによるモバイルゲームのパフォーマンス向上テクニック

www.slideshare.net

はじめに

  • これからの方向性を示した内容。まだまだ変わる可能性がある。

Jobs101

  • マルチコアのハードにきちんと対応するためにJob化がされる。
  • ただしマルチコアに対応するために並列処理をきちんと意識する必要がある。
  • Unity2017.2 以降で対応予定

2017以降の新機能

  • C++とC#間ではmarshalingなしでアクセスできるNativeArrayの型ができる
  • jobに最適化された新たなコンパイラができる

    • jobSystemではGCが働かないunmanagedなので、developperがきちんとDisposeする必要がある。
    • これにより、マルチスレッドにより特化したコーディングが可能となる。
  • MONOのコンパイル処理が変わる

    • ILから中間言語を出して、最適化そしてLLVM送りさらに最適化、そしてメモリに書き込む。

現在のマルチスレッドに対する制限

  • Jobをまだ止めることができない。
  • スレッドセーフではない

job化のbest practice

  • DataOrientedDesign(DOD)
  • マルチスレッドに対応していなくもDODを適応すべき
  • Objectをまとめて同じスクリプトを適応するよりも、Arrayにつめてマネージャーへ

DODへの方法

Step1(従来のMonoBehavior追加する方法)

MonoBehaviorに対して関数を追加して使う

Step2

オブジェクトのすべてのtransformをArrayで管理する。

Step3

IComponentDataを利用して、各Objectの情報を格納する

Step4

データの整合性をとれるようにする。