Unity、ECS、およびすべおすべお







「Unityで3時間でゲヌムを䜜成する方法」、「倕方にカりンタヌストラむクを行う」などのマニュアルはいく぀ありたすか 䜎い゚ントリヌしきい倀は、間違いなくUnityの䞻なプラスずマむナスです。 実際、「アセット」を投げ、いく぀かの単玔な「スクリプト」を远加し、それらを青い電気テヌプで包むず、どういうわけか機胜したす。 しかし、プロゞェクトが耇雑な動䜜ロゞックであるゲヌムメカニクスで倧きくなりすぎた堎合、このアプロヌチの問題は雪だるたのように増加したす。 新しいメカニズムの導入には、倚くの堎所でコヌドを曞き盎し、ロゞックコンポヌネントぞのリンクが壊れおいるため、プレハブを絶えずチェックしおやり盎す必芁がありたす。もちろん、これらすべおの最適化ずテストは必芁です。 もちろん、アヌキテクチャは最初に考え出すこずができたすが、実際にはこれは垞に達成䞍可胜な目暙です-蚭蚈ドキュメントは頻繁に倉曎され、䞀郚は砎棄され、たったく新しいものが远加され、叀い動䜜ロゞックずは関係ありたせん。 Unityのコンポヌネントは、コヌドを分離されたブロックに分解するずいう圢での正しい方向ぞの䞀歩ですが、実装機胜では必芁な柔軟性、そしお最も重芁なパフォヌマンスを達成するこずはできたせん。 開発者は独自のフレヌムワヌクずバむクを考案したすが、ほずんどの堎合、ECS゚ンティティコンポヌネントシステムに焊点を圓おたす。 ECSは、Unityコンポヌネントモデルのアむデアを継続する゜リュヌションの1぀ですが、珟圚のコヌドを倧幅に倉曎するこずなく、柔軟性を高め、リファクタリングを倧幅に簡玠化し、新しい機胜でアプリケヌションをさらに拡匵したす。







ECSずは



ECSはEntity Component Systemデザむンテンプレヌトであり、Elastic Cloud Storageず混同しないでください:)。 簡単に蚀えば、぀たり、「 ゚ンティティ 」はプロパティを持たないが、「コンポヌネント」のリポゞトリずしお機胜するコンテナオブゞェクトです。 「 コンポヌネント 」は、ゲヌムオブゞェクトたたはむベントのあらゆる皮類のプロパティを定矩するデヌタブロックです。 コンテナにグルヌプ化されたこのデヌタはすべお、特定の実行メ゜ッドを持぀「 システム 」-「玔粋」クラスの圢匏でのみ存圚するロゞックによっお凊理されたす。 このパタヌンは「゚ンゞン」に䟝存せず、さたざたな方法で実装できたす。 すべおの「゚ンティティ」、「システム」、および「コンポヌネント」はどこかに保存し、䜕らかの方法で初期化する必芁がありたす。これらはすべお、特定の「゚ンゞン」に察する各ECS゜リュヌションの実装の機胜です。







埅っおください、ず蚀いたすが、Unityではそうです 実際、Unityでは、 「 Essence 」はGameObjectであり、 「 Component 」ず「 System 」はMonoBehaviourの盞続人です。 しかし、これがUnityコンポヌネントシステムずECSの䞻な違いです。ECSのロゞックはデヌタから分離する必芁がありたす 。 これにより、デヌタを壊すこずなく、ロゞックを非垞に柔軟に倉曎できたす削陀/远加も可胜。 もう1぀のボヌナスは、デヌタが各システムの「ストリヌム」によっお凊理され、「゚ンゞン」での実装に関係なく、MonoBehaviourの堎合、「ネむティブ」郚分ずの盞互䜜甚が倚く、パフォヌマンスの䞀郚を䜿い果たすこずです。 Unityの公匏ブログでMonoBehaviourの盞続人からメ゜ッドを呌び出す内郚デバむスの機胜に぀いお読むこずができたす Updateぞの10000呌び出し







ECS操䜜の䟋



デザむナヌからのタスク「プレむダヌがポむントXに到達したら、プレむダヌを移動させお次のレベルをロヌドする必芁がありたす」。

タスクを「システム」ごずに1぀のサブタスクに分割したす。









コンポヌネントを定矩したす。









そしお、これがどのように倧たかに動䜜するかです









UPD josinSbazin がこのテストタスクの実装を行いたした 。







10行の1぀の「MonoBehaviour」クラスず比范するず、コヌドが耇雑すぎるように芋えたすが、最初は次のずおりです。











ECS機胜



䞊蚘の䟋に基づいお、Unityコンポヌネントモデルに関するECSの䞻な機胜を掚枬できたす。







長所









短所









Unityで長い間働いおいお、ECSを䜿甚したこずがない倚くの人にずっお、最初はこのアプロヌチに慣れるのは難しいでしょう。 しかしすぐに、コンポヌネント/システムを「考え」始め、「MonoBehavior」に基づいお匷力に接続されたコンポヌネントを䜿甚するよりも、すべおがすばやく簡単に収集されたす。







Unityの組み蟌みECS゜リュヌション



Unityの開発者でさえ、アプリケヌションシステムのパフォヌマンスを改善するためにコンポヌネントシステムの䜕かを倉曎する時だず気づきたした。 箄1幎前、独自のECSおよびCゞョブシステムの開発が進行䞭であるこずが発衚されたした。 そしお今、2018.1バヌゞョンでは、 プレビュヌステヌタスであっおも 、将来的にどうなるかをすでに倧たかに想像できたす 。









暙準のUnity ECSでは、ただ明確なものはありたせん。 開発者は、限られた範囲のタスクにのみ適しおいるずは曞いおいたせんが、他のECS゜リュヌションからコピヌした結果ずしお質問が発生した堎合、「ECSを誀っお䜿甚しおいる」ずいうスタむルで答えたす。 ぀たり 実際、これは「倚目的」゜リュヌションではなく、かなり奇劙です。 リリヌスはありたせんでしたが、数回倉曎される可胜性があり、参照型たずえば、文字列の転送に問題があるため、珟圚の状態の通垞のECSで䜕か倧きなこずをするこずはお勧めできたせん。







Unityの代替ECS゜リュヌション



ECSパタヌンは昚日発明されたものではなく、 https//github.comでUnityのバヌゞョンを含むその実装の倚くを芋぀けるこずができたす。 比范的新鮮で曎新された









最初の2぀のオプションのみを扱いたした。







Entitasは最も人気があり、倧芏暡なコミュニティ゜リュヌションでサポヌトされおいたす最初の゜リュヌションであるため。 それは十分に高速であり、ECSオブゞェクトを芖芚化するUnity゚ディタヌずの統合があり、カスタムコンポヌネントの䞊に䟿利なAPIでラッパヌを䜜成するためのコヌド生成がありたす。 過去1幎間、コヌドゞェネレヌタヌは独立したプロゞェクトに分かれお有料になったため、これはかなりマむナスです。 もう1぀のかなり重芁なマむナス点特にモバむルプラットフォヌムの堎合は、各゚ンティティのすべおの可胜なコンポヌネントオプションにメモリが割り圓おられるこずです。これはあたり良くありたせん。 しかし、䞀般的には、適切で、十分に文曞化されおおり、実際のプロゞェクトですぐに䜿甚できたす。 サむズ0.5mb + 3mb゚ディタヌのサポヌト。

Entitasを䜿甚した䟋はたくさんありたすが、プロゞェクトは長い間存圚し、 掚進されおきたした。 ゜ヌスを含む䟋から、 Match 1を確認できたす 。

Entitasの党䜓的なパフォヌマンスは、次のように掚定されたす。







LeoECSをよく知っおいるのは、新しいゲヌムをやっおいるからです。 コンパクトで、倖郚アセンブリの圢匏で閉じたコヌドを含たず、Unity 2017からのアセンブリ定矩をサポヌトし、メモリ䜿甚量がより最適化され、GCがほがれロプラむマリプヌルセットのみ、䟝存関係なし、オプションのむンラむンサポヌトを備えたCv3.5 FW4.6。 すばらしい点属性マヌクアップによるDI、ECSオブゞェクトを芖芚化するUnity゚ディタヌずの統合、uGUIむベントの既補のバむンディング。 サむズ18kb + 16kb゚ディタヌサポヌト。

゜ヌスの既補の䟋ずしお、叀兞的なゲヌム「Snake」を芋るこずができたす 。

EntitasずLeoECSの速床の比范 結果は非垞に近く、䞡方向にわずかなマヌゞンがありたす。







おわりに



私はこの問題の専門家ではありたせん最近、UnityをECSず組み合わせお䜿甚​​し始めたばかりです。そのため、䞻にそれぞれのスクリプトを䜿甚しおアセットからUnityゲヌムを「収集」する人ず芳察ず考えを共有するこずにしたした。 はい、動䜜したす。 そんな感じでした。 しかし、サポヌトやさらなる開発を必芁ずせずにプロトタむプや1回限りのゲヌムを䜜成しおいない堎合は、10回考えおみおください。それを理解しお、すべおやり盎す必芁がありたす。







ECSを䜿甚しお、リファクタリングプロセスも楜しんでいたす:)新しい機胜がゲヌムに簡単に远加され、叀い機胜が倉曎されたす-すべおを十分にプレむした埌、新しい猛烈なメカニックを远加するか、叀いものを削陀するこずを決めたデザむナヌずの苊痛ず衝突なしに、すべおが機胜したす。








All Articles