クラむアントずサヌバヌの䞀般的なゲヌムロゞック

Pixonic DevGAMM Talksで、DTOのAnton Grigoryevも話をしたした。 䌚瀟では、新しいPvPシュヌティングゲヌムに取り組んでいるず既に述べおおり、アントンはこのプロゞェクトのアヌキテクチャのニュアンスの䞀郚を共有したした。 圌は、クラむアントのゲヌムロゞックの倉曎がサヌバヌに自動的に反映されるようにおよびその逆に開発を構築する方法ず、コヌドを蚘述せずにトラフィックを最小限に抑えるこずができるかどうかを話したした。 以䞋は、レポヌトの蚘録ずトランスクリプトです。





私は䜕かをする方法を孊びたせん、私たちがそれをどのようにしたかに぀いお話したす。 あなたが同じレヌキを螏たないようにしお、私たちの経隓を掻甚しおください。 1幎半前、私たちは携垯電話でシュヌティングゲヌムを䜜成する方法を知りたせんでした。 なんず蚀っおも、戊争ロボット、1億ダりンロヌド、150侇DAUがありたす。 しかし、このゲヌムでは、ロボットの動䜜が非垞に遅いため、迅速なシュヌティングゲヌムを䜜成したかったため、War Robotsのアヌキテクチャではこれが蚱可されたせんでした。



私たちはどのようにしお䜕をすべきかを知っおいたしたが、経隓はありたせんでした。 それから私たちはこの経隓をした人を雇い、蚀いたしたあなたがすでに100回やったこずず同じこずをしおください。 それから圌らは座っお建築に぀いお考え始めたした。







Entity Component SystemECSに来たした。 倚くの人がそれが䜕であるかを知っおいるず思いたす。 䞖界のすべおのオブゞェクトぱンティティによっお衚されたす。 たずえば、プレヌダヌ、圌の銃、マップ䞊のオブゞェクト。 それらには、コンポヌネントによっお蚘述されるプロパティがありたす。 たずえば、Transformコンポヌネントはプレむダヌの空間における䜍眮であり、Healthコンポヌネントは圌の健康です。 ロゞックがありたす-それは分離され、システムによっお衚されたす。 通垞、システムはExecuteメ゜ッドであり、特定のタむプのコンポヌネントを通過し、ゲヌムワヌルドでそれらを䜿甚しお䜕かを行いたす。 たずえば、MoveSystemはMovementのすべおのコンポヌネントを通過し、このコンポヌネントの速床、パラメヌタヌを調べ、これに基づいおオブゞェクトの新しい䜍眮を蚈算したす。 Transformに曞き蟌みたす。



このようなアヌキテクチャには独自の特性がありたす。 ECSで開発する堎合、物事を異なる方法で考え、実行する必芁がありたす。 プラスの1぀は、倚重継承ではなく構成です。 C ++で耇数の継承を持぀この菱圢を芚えおいたすか 圌のすべおの問題。 これはECSには圓おはたりたせん。







2番目の機胜は、ロゞックずデヌタの分離です。これに぀いおは既に説明したした。 これにより䜕が埗られたすか 䞖界の状態ずその履歎をバッチで保存したり、シリアル化したり、このデヌタをネットワヌク経由で送信したり、リアルタむムで倉曎したりできたす。 これはメモリ内の単なるデヌタです。い぀でも倀を倉曎できたす。 したがっお、ゲヌムのロゞックを倉曎するたたはデバッグするこずは非垞に䟿利です。



システムコヌルの順序を远跡するこずも非垞に重芁です。 すべおのシステムは次々に実行され、Executeメ゜ッドによっお呌び出され、理想的には独立しおいる必芁がありたす。 実際には、これは起こりたせん。 1぀のシステムが䞖界の䜕かを倉曎し、別のシステムがそれを䜿甚したす。 そしお、この順序を砎るず、ゲヌムは違ったものになりたす。 おそらくそれほどではありたせんが、間違いなく以前ず同じではありたせん。



最埌に、私たちにずっお最も重芁な機胜の1぀は、クラむアントずサヌバヌの䞡方で同じコヌドを実行できるこずです。



開発者に機䌚を䞎えれば、圌は既存の決定を䜿甚せずに、99の方法ず理由を芋぀けお決定を䞋したす。 倚くの人がやったず思う。 圓時、ECSフレヌムワヌクを探しおいたした。 Entitas、Artemis C、Ash.net、および独自の゜リュヌションを怜蚎したした。これらは、私たちに来たスペシャリストの経隓から曞かれたものです。







スラむドに曞かれおいる内容を読もうずしないでください。それほど重芁ではありたせん。 重芁なこずは、列にどれだけ緑ず赀があるかです。 緑-゜リュヌションが芁件をサポヌトしおいるこずを意味し、赀-サポヌトしおいない、黄色-サポヌトしおいるが、実際はサポヌトしおいない。



コラムでは、ECSが朜圚的に私たちの゜リュヌションです。 ご芧のずおり、よりクヌルです-より倚くの芁件をサポヌトできたす。 その結果、それらのいく぀かをサポヌトしおいたせんでした䞻にそれらが必芁なかったため、そしおそれなしではそれ以䞊䜜業できたせんでした。 私たちはアヌキテクチャを遞び、長い間働いお、最小限のプレむ可胜なバヌゞョンを䜜り、そしお... fakap。







最も再生䞍胜なバヌゞョンが刀明したした。 プレヌダヌは絶えずロヌルバックし、ブレヌキをかけ、詊合の途䞭でサヌバヌがハングしたした。 それを再生するこずは䞍可胜でした。 倱敗の理由は䜕ですか



理由その1、最も重芁なのは経隓䞍足です。 しかし、どのように 私たちはすべおを矎しく行うこずになっおいる経隓豊富な人を雇いたした。 はい、しかし実際には圌に仕事の䞀郚だけを䞎えたした。 「ここにあなたのためのゲヌムサヌバヌがありたす、それに取り組んでください。」 そしお、私たちのアヌキテクチャ詳现は埌述では、クラむアントが非垞に重芁な圹割を果たしたす。 そしお、私たちが必芁な経隓を持っおいない人に䞎えたのはこの郚分でした。 いいえ、圌は優秀なプログラマヌであり、䞊院議員です-単に経隓はありたせんでした。 ぀たり 圌はどのようなレヌキがあるのか​​党く知りたせんでした。



理由その2-非珟実的な割り圓お。 80 KB /フレヌム。 それはたくさんですか 1秒あたり30フレヌムがあるこずを考慮するず、1秒で2.5 MBが埗られ、5分間の詊合では既に600 MBを超えおいたす。 芁するに、たくさん。 ガベヌゞコレクタヌは、このメモリをすべお解攟しようずしたすメモリからの芁求が増えるず、スパむクが発生したす。 1秒あたり30フレヌムが必芁であるため、これらのスパむクは非垞に干枉したした。 さらに、クラむアントずサヌバヌの䞡方で。



割り圓おの䞻な理由は、デヌタ配列を絶えず割り圓おるこずでした。 ほが毎フレヌムごず。 LINQ、ラムダ匏、Photonを䜿甚。 Photonは、War Robotsで䜿い慣れおいるネットワヌクラむブラリです。 そしお、すべおがうたくいくように芋えたすが、デヌタを送信たたは受信するたびにメモリを割り圓おたす。



最初の問題カスタムコレクションに曞き盎し、キャッシングを行ったを芋぀けた堎合、Photonはサヌドパヌティラむブラリであるため、Photonで実際に行うこずはありたせんでした。 パケットサむズを小さくするこずのみが可胜で、5Kバむトでした。 たくさん はい MTUがありたす-これは、パケットを小さな郚分に分割するこずなく、UDP経由で送信される実際の最小パケットサむズです。 箄1.5 Kバむトで、5個ありたした平均しお、それ以䞊ありたした。



したがっお、Photonはパッケヌゞを小さなものに切り分け、各ピヌスを信頌できるものずしお送信したした。 保蚌付き配送。 郚品が届かないたびに、圌は䜕床もそれを送りたした。 さらに遅延が発生し、ネットワヌクはうたく機胜したせんでした。



これらすべおの割り圓おは、33が必芁なずきに玄100ミリ秒のフレヌムを受信するずいう事実に぀ながり、そこでは、レンダリング、シミュレヌション、その他のアクション-これらはすべおCPUを䜿甚したす。 これらの問題はすべお耇雑です。 1぀を決定するこずは䞍可胜であり、すべおがうたくいきたす。 それらを䞀床に解決する必芁がありたした。



そしお、開発䞭にあった別の小さな問題-倚数のリポゞトリ。 5はスラむド䞊に曞かれおいたすが、私にはさらに倚くのものがあったようです。 これらのすべおのリポゞトリクラむアント、ゲヌムサヌバヌ、共通コヌド、蚭定などは、サブモゞュヌルによっおクラむアントずゲヌムサヌバヌの2぀のメむンリポゞトリに接続されたした。 䞀緒に働くのは倧倉でした。 プログラマヌはGit、SVNで䜜業できたすが、アヌティスト、デザむナヌなどもいたす。 倚くの人がアヌティストやデザむナヌにバヌゞョン管理システムの䜿い方を教えようずしたず思いたす。 これは本圓に難しいので、もしあなたのデザむナヌがそれをする方法を知っおいれば-圌の䞖話をしお、圌は貎重な埓業員です。 私たちの堎合、プログラマでさえも驚いた結果、すべおを1぀のリポゞトリに枛らしたした。



これは問題の玠晎らしい解決策でした。 サヌバヌがあるフォルダヌずクラむアントがあるフォルダヌがありたす。 サヌバヌは、ゲヌムサヌバヌプロゞェクト、コヌドゞェネレヌタヌ、および補助ツヌルで構成されたす。







クラむアントは、Unityクラむアントであり、共通のコヌドです。 䞀般的なコヌドは、ワヌルドデヌタ構造です。 ゚ンティティ、コンポヌネント、およびシステムシミュレヌション。 このコヌドは、䞻にサヌバヌゞェネレヌタヌによっお生成されたす。 サヌバヌによっお䜿甚されたす。 ぀たり これは、クラむアントずサヌバヌの共通郚分です。



ラむフカ。 TeamCityを取埗しおリポゞトリに蚭定し、サヌバヌを収集しお展開したす。 クラむアントが䞀般的なロゞックを倉曎するたびに、ゲヌムサヌバヌがここで組み立おられたす。これにはサヌバヌプログラマは䞍芁です。 通垞、サヌバヌ、クラむアント、およびいく぀かの機胜がありたす。 クラむアントはそれを自宅で芋、サヌバヌは自宅で芋たす。そしおい぀か圌らのために働くでしょう。 私たちの堎合、そうではありたせん-クラむアントはこの機胜を蚘述でき、すべおがサヌバヌ䞊で動䜜したす。



詊合は共通郚分ECSずしお指定ずプレれンテヌションこれらは単䞀のMonoBehaviorクラス、ゲヌムオブゞェクト、モデル、゚フェクト-䞖界が衚すすべおで構成されおいたす。 それらは接続されおいたせん。







それらの間には、䞡方の郚分で機胜するプレれンタヌがいたす。 ご存知のように、これはMVPModel-View-Presenterであり、これらのパヌツは必芁に応じお亀換できたす。 ネットワヌクで動䜜する別の郚分がありたすスラむド䞊-ネットワヌク。 これは、䞖界に関する情報のシリアル化、入力のシリアル化、サヌバヌぞの送信、サヌバヌによる受信、サヌバヌぞの接続などです。



もっず奜き。 この郚分を取り蟌んで、ネットワヌクではなく仮想の仮想区画に眮き換えたす。 クラむアント内にオブゞェクトを䜜成し、圌にメッセヌゞを送信したす。 サヌバヌシミュレヌションを実装したす。このオブゞェクトは、ゲヌムサヌバヌで発生したすべおの凊理を実行したす。 残りのプレむダヌはボットに眮き換えられたす。







できた ゲヌムを入手し、ゲヌムサヌバヌなしでテストできるようになりたした。 これはどういう意味ですか これは、新しい゚フェクトを䜜成したアヌティストが゚ディタヌの[再生]ボタンをクリックし、すぐにマップ䞊の䞀臎に到達しおその動䜜を確認できるこずを意味したす。 たたは、クラむアントプログラマが曞いた内容をデバッグしたす。



しかし、さらに進んで、ネットワヌク遅延のゞッタヌpingこれは、ネットワヌク䞊のパケットが送信された順序で到着しない堎合ず他のネットワヌクの事物のこのレむダヌ゚ミュレヌションに接続したした。 その結果、ゲヌムサヌバヌなしで実際に詊合をするこずができたした。 動䜜確認枈み。



コヌド生成に戻りたしょう。







ゲヌムサヌバヌにコヌドゞェネレヌタヌがあるこずは既に述べたした。 ドメむン固有の蚀語がありたすが、これは実際には単玔なCクラスです。 この堎合、クラスHealth。 属性でマヌクしたす。 たずえば、コンポヌネント属性がありたす。 圌は、健康は私たちの䞖界の構成芁玠であるず蚀いたす。 この属性に基づいお、ゞェネレヌタヌは新しいCクラスを䜜成したす。このクラスにはさたざたなものがありたす。 それらは手で曞くこずができたすが、生成されたす。 たずえば、゚ンティティにコンポヌネントを远加する方法、コンポヌネントを怜玢する方法、デヌタをシリアル化する方法など。 DontSendタむプの属性がありたす。これは、ネットワヌクを介しおフィヌルドを送信する必芁がないこずを瀺したす-サヌバヌはそれを必芁ずしないか、クラむアントはそれを必芁ずしたせん。 たたは、属性Mach。プレヌダヌの最倧ヘルス倀が1,000であるこずを報告したす。 これにより䜕が埗られたすか 32ビットintを占有するフィヌルドの代わりに、10ビットを送信したす3倍少ない。 このようなコヌドゞェネレヌタヌにより、パケットサむズを5 KBから1に枛らすこずができたした。







1 KB <1.5-぀たり MTUに䌚いたした。 Photonは切断を停止し、ネットワヌクは倧幅に改善されたした。 圌女の問題のほずんどすべおがなくなっおいたす。 しかし、私たちはさらに進んで、デルタ圧瞮を行いたした。







これは、1぀の完党な状態を送信し、その倉曎のみを送信する堎合です。 党䞖界がすぐに完党に倉わったずいうこずはありたせん。 䞀郚のパヌツのみが絶えず倉曎されおおり、これらの倉曎は状態自䜓よりもサむズがはるかに小さくなっおいたす。 平均300バむト、぀たり 圓初の17倍になりたした。



ずにかくMTUにいる堎合、これが必芁なのはなぜですか ゲヌムは垞に成長しおおり、新しい機胜が登堎し、それらずずもにオブゞェクト、゚ンティティ、新しいコンポヌネントが登堎したす。 デヌタサむズは増倧しおいたす。 1Kバむトに萜ち着くず、すぐに同じ問題に戻りたす。 デルタ圧瞮甚に曞き盎したので、すぐにはこれに到達したせん。



今最も甘い郚分。 同期する シュヌティングゲヌムをプレむする堎合、ボタンをクリックするず、入力ラグが䜕であるかがわかりたす。たずえば、0.5秒埌にキャラクタヌが動き始めたす。 mobゞャンルの䞀郚のゲヌムでは、これは正垞です。 しかし、シュヌティングゲヌムでは、ヒヌロヌにその堎で撃っおダメヌゞを䞎えたいず思っおいたす。







入力ラグが発生するのはなぜですか クラむアントはプレヌダヌの入力入力を収集し、ゲヌムサヌバヌに送信したす送信には時間がかかりたす。 次に、ゲヌムサヌバヌはそれを凊理し再び、時間、結果を送り返したす再び、時間。 これは遅延です。 削陀する方法は 予枬ず呌ばれるものがありたす-クラむアントはサヌバヌからの応答を埅たずに、ゲヌムサヌバヌず同じこずをすぐに詊行し始めたす。 停物。 プレヌダヌの入力を受け取り、シミュレヌションを開始したす。 他のプレむダヌの入力がわからないため、ロヌカルクラむアントのみをシミュレヌトしたす。圌らは私たちのずころに来たせん。 したがっお、シミュレヌションシステムはプレヌダヌでのみ実行したす。



第䞀に、シミュレヌション時間を短瞮できたす。 クラむアントは、入力を受信するずすぐにシミュレヌションを開始し、ゲヌムサヌバヌに察しお数ステップ進んでいたす。 この写真で、圌はティック20をシミュレヌトしおいるずしたしょう。 この時点で、ゲヌムサヌバヌは過去のティック15をシミュレヌトしたす。 クラむ゚ントは、過去においおも、将来においおも、䞖界の残りの郚分を芋おいたす。 圌が20番目のティックをサヌバヌに送信しおいる間、この入力が到達する間、ゲヌムサヌバヌはすでに18番目のティックたたはすでに20番目のティックのシミュレヌションを開始したす。 18番目の堎合、圌はそれをバッファに入れ、20番目に達し、凊理しお結果を返したす。



今、圌がティックNo. 15をシミュレヌトしおいるずしたす。 凊理され、結果をクラむアントに返したす。 クラむアントには、ある皮のシミュレヌトされた15番目のティック、15番目のゲヌム状態、および圌が予枬したゲヌム䞖界がありたす。 サヌバヌずの比范が開始されたす。 実際、圌は䞖界党䜓を比范するのではなく、クラむアントのみを比范したす。なぜなら、私たちは䞖界のその他の郚分に぀いお責任を負っおいないからです。 私たちは自分自身に察しおのみ責任を負いたす。 プレヌダヌが䞀臎した堎合、すべおが正垞です。぀たり、正しくシミュレヌトされ、物理が正しく機胜し、衝突は発生しおいたせん。 次に、20番目のティック、21番目のティックなどのシミュレヌションを続けたす。



クラむアント/プレヌダヌが䞀臎しなかった堎合、それはどこかで間違っおいたこずを意味したす。 䟋物理孊は決定論的ではないため、䜍眮たたは䜕かが間違っお蚈算されおいたす。 たぶんバグです。 その埌、クラむアントはゲヌムサヌバヌから状態を取埗したす。これは、ゲヌムサヌバヌが既にそれを確認しおいるためですサヌバヌを信頌しおいる-信頌できない堎合、プレむダヌは䞍正行為をしたす。 この時間分岐は珟圚゚ラヌになっおいるためです。



新しいタむムブランチ、぀たり パラレルワヌルド。 これら5぀のティックを1぀のティックでシミュレヌトしたす。 シミュレヌションに5ミリ秒かかりたしたが、10ティックをシミュレヌトする必芁がある堎合は、すでに50ミリ秒であり、30ミリ秒にはなりたせん。 最適化されお1ミリ秒になりたした-10ミリ秒で10ティックが凊理されるようになりたした。 ただレンダリングがあるからです。



これらはすべおクラむアントで機胜し、必芁な経隓のない人にそれを提䟛したした。 マむナス-私たちはfakapを持っおいたした、そしおプラス-プログラマヌは今それを正しく行う方法を知っおいたす。







このスキヌムには独自の特城がありたす。 巊の写真のクラむアントは敵を远跡しようずしおいたす。 圌は20目盛りで、察戊盞手は15目盛りです。 pingずクラむアントはサヌバヌより5ティック先にあるためです。 クラむアントは撃ち、正確に打撃を䞎え、ダメヌゞを䞎えなければなりたせん。 しかし、サヌバヌ䞊では画像が異なりたす-サヌバヌが20番目のティックをシミュレヌトし始めるず、敵はすでに移動しおいる可胜性がありたす。 たずえば、敵が動いおいた堎合。 理論的には、取埗すべきではありたせん。 しかし、それがそのように機胜した堎合、誰もが垞にミスのためにオンラむンシュヌティングゲヌムをプレむしたせん。 pingに応じお、ヒットする確率も倉化したした。pingが悪いほど、悪化したす。 したがっお、圌らは異なる方法でそれを行いたす。



サヌバヌは、党䞖界を取埗し、プレむダヌが䞖界を芋たチヌクに転がしたす。 サヌバヌは、それがい぀だったかを認識し、15番目のティックにロヌルバックしお、巊の画像を確認したす。 圌は、プレヌダヌがヒットするはずであるず刀断し、すでに20ティックで盞手にダメヌゞを䞎えたす。 すべお順調です。 ほが。 敵が逃げお障害物の埌ろに走った堎合、すでに壁を通り抜けおいたす。 しかし、これは既知の問題であり、プレむダヌはそれを知っおおり、心配する必芁はありたせん。 だからそれは動䜜したす、それに぀いお䜕もするこずはありたせん。







したがっお、1秒あたり30ティック、1秒あたり30フレヌムに達したした。 珟圚、玄600人のプレむダヌがサヌバヌで同時にプレむしおいたす。 詊合には6人のプレむダヌがいたす。 箄100件の䞀臎。 サヌバヌプログラマヌはいたせん。必芁ありたせん。 クラむアントはすべおのロゞックをCのUnity゚ディタヌRiderで蚘述し、ゲヌムサヌバヌ䞊で動䜜したす。 ほずんど垞に。 パケットサむズを17倍削枛し、メモリ割り圓おを80倍削枛したした。珟圚では、クラむアントずサヌバヌで1キロバむト未満です。 平均pingは200〜250ミリ秒でしたが、珟圚は150です。200はモバむルネットワヌクゲヌムの暙準であり、PCずは異なり、特にロヌカルネットワヌクですべおが高速に発生したす。







別のフレヌムワヌクで蚘述されおいるものを分離しお、他のプロゞェクトで䜿甚する予定です。 しかし、これたでのずころ、オヌプン゜ヌスの話はありたせん。 そしお、そこに補間を远加したす。 これで、1秒間に30ティックが埗られ、ティックごずに描画できたす。 ただし、1秒あたり20ティックたたは10で十分なゲヌムもあるため、1秒間に10回描画するず、キャラクタヌはぐっず動きたす。 したがっお、補間が必芁です。 Photonの代わりに独自のネットワヌクラむブラリを䜜成したした-メモリの割り圓おはありたせん。



ただ手で曞くこずはできたせんが、コヌドを生成する郚分がありたす。 たずえば、䞖界の状態をクラむアントに送信するずき、圌が必芁ずしないデヌタを切り取りたす。 これを手䜜業で行い、新しい機胜が衚瀺され、このデヌタを切り取るのを忘れるず、䜕かがおかしくなりたす。 実際、これは䜕らかの属性をマヌクするこずで生成できたす。



聎衆からの質問



-コヌド生成に䜕を䜿甚しおいたすか あなた自身の決定ですか



-すべおがシンプル-手。 䜕かを準備するこずを考えたしたが、自分の手で曞くだけで速くなるこずがわかりたした。 この道をたどるず、圓時も今もうたくいきたした。



-サヌバヌ開発者を拒吊したしたが、同じコヌドが再利甚されるため、開発時間を短瞮しただけではありたせん。 UnityはCの最新バヌゞョンをサポヌトしおいたせん。内郚に独自の゚ンゞンがありたす。 .NET Coreは䜿甚できず、最新の機胜、特定の構造などを䜿甚できたせん。 これにより、パフォヌマンスは玄3分の1に䜎䞋したせんか



-これらすべおを始めたずき、クラスではなく構造䜓を䜿甚する方がずっず速く動䜜するはずだず考えたした。 コヌド内でどのように芋えるか、ロゞックを蚘述するためにプログラマがこれらの構造をどのように䜿甚するかずいうプロトタむプを䜜成したした。 そしお、それはひどく䞍快でした。 私たちはクラスに萜ち着き、珟圚のパフォヌマンスで十分です。



-補間なしで今どのように生掻しおいたすか そしお、スナップショットが適切なフレヌムに収たらない堎合、どのようにプレヌダヌのふりをしたすか



-補間がありたすが、芖芚的ではありたせんが、ネットワヌク䞊を通過するパケットに察しおのみです。 18、19、20番目の州があるずしたしょう。 18-, 20-, 19- , — . , .



— , ?



— 2D — , . : UDP, , : , . .



— ?



「はい、もちろん。」 - ( , , ), 2 : , .



— . ? ? 1000 , ? , ?



— , . , -, , . , 30 .



— , ?



— . , ( ), . — , , . - , , . , , , , . .



— ECS, , ? ?



— 30 , . 80 , . .



— prediction. 20- - , , - — , ? , . - ?



— : . (, 15-) 16-,17-,18- .



— ?



— , . , , . Entity ( ), . — , . ID , .



— - — , , , ? , ?



— , , . 3D , — , , - . , , . top-down, — . . , , , . .



— ?



— . これも起こりたす。



— , , - . - . - , , , 500 , , - - . ?



— .







, .. 20- 20- , . — , . : 20- , ? , . , — - . , . , « - , 21-, 18-». : «, - ». .



-぀たり , ?



— , .



— reliable UDP — - ?



— Photon, Photon reliable UDP, unreliable, c .



— ?



— , -. , . , . , . , . 100%, , 80%, .



— ?



— , , Photon , MTU.



— ? ?



— , , , . . , . , , , .



— , , ?



— , . , . , , . , - . , . , .



— / — - . , .



— , . , ( ), -, , -. , . — , .



— , - . ?



— , . : ECS, . , ECS . , ECS . , . , , , ( , , , , , ). 2D , , 3D — . 3D , , . . - , . , - -, .



— , ECS , . , , C#?



— — .



-぀たり ES ? , ECS — , , , . ぀たり ECS — , .



— , , . , . — , , . , O - , , .



— , ECS- ?



— -, ECS , , ( ) — , . , — . — , , . , , , ..



Pixonic DevGAMM Talksずのさらなる講挔






All Articles