今はECSをチマチマ触っている。ECSで開発をしているというよりは、ECSで自分の作ろうと思っているゲームが作れそうかの検証と言った感じでやっている。
実際にゴリゴリ開発しているわけではないので参考程度にしてください
ECS、なんだかんだで難しいなと思った。し、そもそも現状のECSではできないこともある。ECSでやりたいことは大量のオブジェクトの描画で負荷がかかりすぎないようにしたいというものなので、
- 大量の静的なオブジェクトはECS
- 細かい制御はGameObject
という風に使い分けるのが良いだろうなと思った。大抵はそれで解決するのだけれど、ちょっと困ったことは物理で、Unity Physicsを入れると既存のUnityの物理演算(PhyX)が動かなくなる。動かすオプションがあるかもしれないがどの道GameObject側の物理演算とは干渉しない。プレイヤーは道や橋のような静的なオブジェクトの上を歩くことになるので、干渉してくれないと困る。
とりあえずキャラクターの基本的な挙動はこのパッケージで動かすことにした。 www.youtube.com
そして描画回りだったりはGameObjectで動かすというのがいい塩梅の妥協案なのだと思う。このDOTSおじさんもそのやり方を案内している youtu.be
とはいえ当たり判定をどうしたものかなと思った。モーションとかをanimationさせる時に、colliderも一緒にコントロールできないといろいろと不便なんじゃないかなと。少なくとも私の作る予定のゲームでは困りそうだなと思った。
animationで当たり判定のオブジェクトを動かして、それをUnity PhysicsのPhysics Shapeに変換して同期するようなプログラムを書くと。ちょっとめんどくさそう
で、すこし調べたらこのアセットを見つけた。animationをentityにベイクできるライブラリだ Rukhanka - ECS Animation System | アニメーション ツール | Unity Asset Store
どうも物理にも対応しているらしい。と Discordに入ってやり取りをみてると、結構ドンピシャな使い方をしている人を見つけた。どうやらcolliderもanimationできるらしい
このアセットを調べて動かしてみて分かったことをまとめる
- colliderを持つオブジェクトを動かしたとき、あるいはscaleを変更したときに、オブジェクトのcolliderもちゃんと追従する
- animationで子オブジェクト側にcolliderがある場合でも問題なく追従する
- colliderそもそもを大きくしても反映されない
ということが分かった。私は直方体がブンブンできれば良いのでこれで良いが、FPSのような厳密な当たり判定が必要な場合はちょっと対応方法を考え直さないといけないかもしれない