Engine続行するにはJavascriptを有効化してください。CIRCLE非ゲーム一連のPhoton製品と専用ライセンスオプションを思う存分お使いください。(ゲームロジック)イントロシステムは、Quantumのすべてのゲームプレイロジックのエントリポイントです。これらは通常のC#クラスとして実装されますが、システムが予測/ロールバックモデルに準拠するには以下のいくつかの制限が適用されます。ステートレスである(Frameクラスのインスタンスであるゲームプレイデータは、Quantumのシミュレーターによってパラメーターとしてすべてのシステムアップデートに渡されます)。ライブラリを提供しています)。Quantum名前空間に常駐している。継承できる基本システムクラスは3つあります。単純なゲームプレイの実装(initおよびupdateコールバック+シグナル)。シグナルを実装するだけのアップデート不要のシステム(タスクをスケジュールしないことでオーバーヘッドを削減)。タスクグラフへの並列ジョブのスケジュール(この基本的なマニュアルでは説明していません)。すべての_Core_システムが含まれています。予測されたフレーム内で、Transform2Dコンポーネントを持つエンティティをカリングします。予測されたフレーム内で、Transform3Dコンポーネントを持つエンティティをカリングします。コンポーネントを持つすべてのエンティティに対して物理演算を実行します。コンポーネントを持つ全てのエンティティに対して、物理演算を実行します。全てのNavMesh関連コンポーネントに使用されます。EntityPrototypeの作成、マテリアライズ、初期化を行います。ISignalOnPlayerDisconnectedのシグナルをトリガーするために使用されます。(Editorでのみ使用可能)。ユーザーの利便性を考慮して、すべてのシステムがデフォルトで含まれています。コアシステムは、ゲームに必要な機能に応じて選択的に追加/削除することができます。ゲームが2Dなのか3Dなのかに応じて、PhysicsSystem2DやPhysicsSystem3Dだけを残すことができます。SystemMainThreadから継承するC#クラスです。スケルトンの実装では、少なくともUpdateコールバックを定義する必要があります。ゲームプレイが初期化されているときに1回だけ呼び出されます(ゲームコントロールデータをセットアップするのに適した場所など)。ゲームの状態(ゲームループのエントリポイント)を進めるために使用されます。システムが別のシステムによって無効化/有効化されたときに呼び出されます。使用可能なすべてのコールバックに同じパラメーター(Frameのインスタンス)が含まれていることに注意してください。Frameクラスは、エンティティ、物理、ナビゲーション、および不変のアセットオブジェクト(別の章で説明)等を含む、すべての一時的および静的なゲーム状態データのコンテナーです。これは、Quantumの予測/ロールバックモデルに準拠するために、システムがステートレスである必要があるためです。Quantumは、すべての(変更可能な)ゲーム状態データがFrameインスタンスに完全に含まれている場合にのみ確定性を保証します。読み取り専用の定数またはプライベートメソッド(すべての必要なデータをパラメーターとして受け取るでき)を作成すると有効です。次のコードスニペットは、システムで有効および無効(ステートレス要件に違反)のいくつかの基本的な例を示しています。具体的なシステムクラスは、ゲームプレイの初期化中にQuantumのシミュレーターに注入する必要があります。}}Quantumにはいくつかのビルド済みシステムが含まれています(物理エンジンの更新、navmesh、およびエンティティプロトタイプのインスタンス化のエントリポイント)。確定性を保証するために、システムが挿入される順序は、すべてのコールバックがすべてのクライアントのシミュレーターによって実行される順序になります。したがって、更新が発生する順序を制御するには、カスタムシステムを目的の順序で挿入するだけです。注入されたすべてのシステムはデフォルトで有効になっていますが、シミュレーションの任意の場所からこれらの汎用関数を呼び出すことにより、実行時にそれらのステータスを制御することができます(Frameオブジェクトで使用できます)。f.SystemIsEnabled<MySystem>();}どのシステムでも別のシステムを非アクティブ化(および再アクティブ化)できるため、1つの一般的なパターンは、シンプルなステートマシンを使用してより専門的なシステムのアクティブ/非アクティブライフサイクルを管理するメインコントローラーシステムを持つことです(例:ゲーム内に最初にロビーを設置、ゲームプレイへのカウントダウンを行い、次に通常のゲームプレイ、そして最後にスコアの状態)。SystemMainThreadタイプを使用する可能性が高いですが、Quantumは特殊なシステム用にいくつかの代替オプションを提供しています。一般的なシステムタイプ。通常の機能をすべて備えた通常のUpdate()を実装します。Update()関数がありません。これは、他のシステムからの信号の実装と受信にのみ焦点を当てたシステムを対象としています。このタイプのシステムは、T型のFilterStructを使用して、それに基づいてエンティティのセットをフィルタリングし、それらをループしてメソッドを呼び出します。複雑な方法が必要な場合は、SystemMainThreadを継承し、自分でフィルタを繰り返し実行することをお勧めします(FilterStructsとFilterの詳細については、コンポーネントのページを参照してください)。システムグループシステムはグループとしてセットアップし、処理することができます。一つ目のステップは、SystemMainThreadGroupから継承したクラスを作成することです。MySystemGroupシステムは、SystemSetup.csでシステムをまとめるために使用できるようになりました。システムグループは通常のシステムと混ぜたりマッチさせたりして使用することができます。}}これにより、コード1行で一連のシステムの有効化・無効化を行うことができます。システムグループを有効化・無効化すると、そのグループを構成するすべてのシステムを有効化・無効化することになります。Frame.SystemEnable<T>()メソッドおよびFrame.SystemDisable<T>()メソッドはシステムをタイプ別で特定します。そのため、複数のシステムが存在すべき場合は、複数のシステムグループをそれぞれ有効化・無効化できるように各自にこれらのメソッドを実装する必要があります。エンティティライフサイクルAPIこのセクションでは、エンティティの作成と構成に直接APIメソッドを使用します。データ駆動型アプローチについては、エンティティプロトタイプの章を参照してください。新しいエンティティインスタンスを作成するには、次のコードを使用します(メソッドはEntityRefを返します)。frame.Create();エンティティには事前定義されたコンポーネントはありません。Transform3DとPhysicsCollider3Dをこのエンティティに追加するには、次のように入力します。c);これらの2つの方法も役立ちます。etc}エンティティに特定のコンポーネントタイプが含まれているかどうかを動的にチェックし、コンポーネントデータへのポインタをフレームから直接取得することもできます。frame.Unsafe.GetPointer<Transform3D>(e);}ComponentSetを使用すると、エンティティに複数のコンポーネントがあるかどうかを1回チェックできます。タイプQuantumのロールバックモデルは、可変サイズのフレームバッファーを維持します。ゲームの状態データ(DSLから定義)のいくつかのコピーが、別々の場所にあるメモリブロックに保持されます。エンティティ、コンポーネント、または構造体へのポインターは、単一のFrameオブジェクト内でのみ有効です(更新など)。エンティティ参照は、問題のエンティティがまだ存在している限り、フレーム全体で機能するエンティティへの安全な参照(一時的にポインタを置き換える)です。エンティティ参照には、次のデータが含まれています。エンティティインデックス:エンティティスロット。特定のタイプのDSL定義の最大数から。エンティティのバージョン番号:エンティティインスタンスが破棄され、スロットを新しいインスタンスに再利用できる場合に、古いエンティティ参照を廃止するために使用されます。v2にはエンティティタイプはありません。スパースセットECSメモリモデルでは、エンティティはコンポーネントのコレクションへのインデックスです。タイプは、バージョン管理などの追加情報を保持します。これらのコレクションは、動的に割り当てられたスパースセットに保持されます。したがって、エンティティーのコレクションを反復処理する代わりに、フィルターを使用して、システムが機能する一連のコンポーネントを作成します。ページを参照してください。ビルド済みのアセットと構成クラスQuantumには、常にFrameオブジェクトを介してシステムに渡される、事前に構築されたいくつかのデータアセットが含まれています。コライダー、ナビゲーションメッシュなどに関するデータ。カスタムプレーヤーデータは、データアセットスロットから追加できます(データアセットの章で説明します)。等):次のスニペットは、Frameオブジェクトから現在のMapおよびNavMeshインスタンスにアクセスする方法を示しています。map.NavMeshes["MyNavmesh"];アセットデータベースすべてのクアンタムデータアセットは、動的アセットデータベースAPIを介してシステム内で利用できます。次のスニペット(DSLとシステムのC#コード)は、データベースからデータからアセットを取得し、それをasset_refスロットに割り当ててキャラクターに割り当てる方法を示しています。最初に、アセットをqtnファイルで宣言し、それを保持できるコンポーネントを作成します。spec;データアセットについては、それぞれの章で詳細に説明しています(Unityのスクリプト可能なオブジェクト(デフォルト、カスタムシリアライザーまたは手順で生成されたコンテンツ)を介してデータアセットを設定する方法のオプションを含む)。シグナル前の章で説明したように、シグナルは、システム間通信用のパブリッシャー/サブスクライバーAPIを生成するために使用される関数シグニチャーです。次の例は、DSLファイルです(前の章の)。entity);このトリガー信号はFrameクラス(f変数)で生成され、「パブリッシャー」システムから呼び出すことができます。entity)「サブスクライバー」システムは、次のように生成された「ISignalOnDamage」インターフェースを実装します。}}シグナルには常に最初のパラメーターとしてFrameオブジェクトが含まれます。これは通常、ゲームの状態に役立つ処理を行うために必要です。生成および事前構築されたシグナルDSLで直接定義された明示的なシグナルに加えて、Quantumには、事前に作成された(「生の」物理衝突コールバックなど)およびエンティティ定義に基づいて生成されたもの(エンティティタイプ固有の作成/破棄コールバック)も含まれています。衝突コールバックシグナルついては、物理エンジンに関する特定の章で説明します。ここでは他の事前作成されたシグナルについて簡単に説明します。ゲームクライアントがRuntimePlayerのインスタンスをサーバーに送信すると呼び出されます(データは1ティックに確認/アタッチされます)。コンポーネントタイプTがエンティティに追加/エンティティから削除されるときに呼び出されます。イベントのトリガーシグナルの場合と同様に、イベントをトリガーするための入り口はFrameオブジェクトであり、各(具体的な)イベントは特定の生成された関数(イベントデータをパラメーターとして)になります。Volume;}これをシステムから呼び出して、このイベントのインスタンスをトリガーできます(Unityからの処理については、ブートストラッププロジェクトに関する章で説明します)。FP._0_5);イベントは、ゲームプレイ自体の実装に使用してはなりません(Unity側のコールバックは確定的ではないため)。イベントは、詳細なゲーム状態の更新のレンダリングエンジンと通信するための一方向なAPIで、ビジュアル、サウンド、UI関連のオブジェクトをUnityで更新します。追加フレームAPIアイテムFrameクラスには、APIの他のいくつかの確定的な部分のエントリポイントも含まれています。これらは一時的なデータとして処理する必要があります(そのため、必要に応じてロールバックされます)。次のスニペットは、最も重要なものを示しています。