【Unity】Hybrid ECS + MeshInstanceRenderer
前回でHybrid ECSを使ってUpdate() 部分をマルチスレッド化してみた。
やはり描画負荷が高いよね。
MeshInstanceRenderer を使いたくなる!!
調べても使い方が難しく意味が分からん!(じゃぁこの投稿は何だよw
MeshInstanceRenderer
試しにGameObject アタッチしメッシュやマテリアルを設定しても描画してくれないよね。
理由はTransformの情報がない(?)かと思います。
じゃ、ネットでMeshInstanceRendererについて調べたら、
var manager = World.Active.GetOrCreateManager<EntityManager>(); var archetype = manager.CreateArchetype(...); // Position とか Rotationとか var entity = manager.CreateEntity(archetype); var look = ... // MeshInstanceRenderer manager.AddSharedComponentData(entity, look);
と、今まで使って来なかった書き方をヒットします。
やりたいこと
従来の概念をあまり捨てないでどうやってMeshInstanceRendererを使うか?
(ECSの考えにあってるかどうかわからんが) 書きました。
gist.github.com
上記のコンポーネントをGameObjectにアタッチすると、
PositionComponent RotationComponent MeshInstanceRendererComponent CopyTransformFromGameObjectComponent
を勝手にアタッチしてくれます。
なぜか ScaleComponent の情報がコピーしてくれないので、今回は無視する!
Awake() 時に、
MeshFilter と MeshRenderer があれば
情報を取得し MeshInstanceRenderer にセットする
ついでにMeshRendererも無効に!