Subsystems
Simple Network Sync API には、一般的なネットワーキング問題に対応するサブライブラリが含まれています。 サブライブラリのほとんどには基本的な実装がされており、多くのプロジェクトで十分に機能しますが、APIを使って機能させたり、独自のものを作るためのガイドとして設計されています。
目次
- コンタクトシステム
- Projectiles And Hitscans
- ProjectileとHitscan
- Utilities
コンタクトシステム
ContactTriggerコンポーネント
このコンポーネントはネットワークコリジョン・トリガー・ヒットスキャンイベントなどへの共通の出発地点です。
2つのContactTriggers間でコンタクトが発生すると、IOnContactEvent.OnContactEvent()
コールバックを生成します。
IContactTrigger を使用する全ての IContactSystem に対してOnContactEvent()が発生します。
SyncContactコンポーネント
ContactTrigger
(上記)と同じGameObjectにこのコンポーネントが存在する場合、ContactTrigger
は全てのOnContactEventコールバックを遅延させシリアライズ化します。ローカルでトリガーするだけではありません。
かわりに、このコンポーネントは処理のためにContactEventを取得します。
そうすることによってリモートのコントローラ権限を持つContactSystemsがイベントを処理することが可能になります。
使用例としては、ContactTrigger
がシューターでトリガーされるヒットスキャンの武器がありますが、影響を受ける体力のシステムは別のプレイヤーに属します。シューターのSyncObjectが生成されたContactEventsを収集し、それらをシリアライズ化して全クライアントに送信し、そこでイベントが再度発生します。
IOnContactEvent.OnContactEvent(ContactEventイベント)
2つのContactTriggerがコンタクトを登録すると生成されるコールバックです。ContactEventは互換性のあるContactReactorにコンタクトする各ContactSystem(VitalSystem/Inventory System)に生成されます。
IContactSystem
他のNetObjectsとの間でTriggerやPickupのインタラクションを生成できるコンポーネントを定義するシステムのルートインターフェースです。
IContactReactor
IContactSystemと作用するコンポーネントを定義します。 Tピックアップアイテムとバイタルやインベントリシステムの間のインタラクションのフローです。
Projectiles And Hitscans
Projectiles and Hitscans can produce ContactEvents similar to normal collisions.
SyncCannonコンポーネント
同一のGameObject上でContactTrigger
のプロキシとして動作することのできるプロジェクタイルを生成するコンポーネントです。
プロジェクタイルが関与しているコリジョンイベントやトリガーイベントは、OnContactEventコールバックをSyncCannon
コンポーネントのあるオブジェクトに発射します。
Contact Projectile
プロジェクタイルプレハブは、ContactProjectileコンポーネントか、IProjectile を実装するコンポーネントを持つ必要があります。
SyncContactScanコンポーネント
コライダーを持つContactTrigger
コンポーネントに対してヒットを検証する全体的なヒットスキャンを生成するコンポーネントです。
ヒットで、同じオブジェクトでContactReactorコンポーネントに処理されるOnContactEventが生成されます。
Contact Groups
Unityのタグやレイヤーの欠点を回避するLayer/Groupマスクシステムです。 Unityのタグは正確なビットマスクではなくストリングベースで、Unityのレイヤーは物理の縛りがあり、ネットワーキングに理想的ではありません。
システムそのものはとてもシンプルです。
ContactGroupSettings
シングルトンはグループ名を保存し、これをビットマスクに翻訳します。
ContactGroupAssign
コンポーネントはコライダーを持つGameObjectに追加することができます。
その後、コリジョン・トリガー・レイキャストの結果にGetComponent<ContactGroupAssign>().Mask
を呼び出してヒットコライダーが対象のグループに属するものか決定できます。
ContactGroupAssignコンポーネント
ランタイムでインデックス付けされた名前のグループを持つオブジェクトのContactGroupを関連付けるのにこのコンポーネントを使用します
Apply To Children が有効になっていると、このコンポーネントを、ContactTrigger
コンポーネントを持つ全ての子トランスフォームに複製します。ただし、独自のContactGroupAssignがない場合です。
Contact Group設定
この設定シングルトンでグループの名づけ・追加・マスクシステムからの削除ができます・
Inventory Contact System
BasicInventoryコンポーネント
IInventory\
このベースクラスとInventory Systemのインターフェイスは、残りのSimpleコードベースと自動的に連動するInventoryコンポーネントの作成を可能にします。
TはInventoryの容量を定義する構造体です。 BasicInventoryコンポーネントは、TにVector3を使用し、ベースを拡張して独自のInventory構造体とロジックを使用して独自のInventory Systemを作成する方法を示します。
InventoryContactReactorコンポーネント
IInventoryable\
インベントリシステムのベースクラスとインターフェイスで、オブジェクトをアイテムとみなして IInventory と相互作用できるようにします。
インベントリにIInventoryableアイテムを正常に追加するためには、以下がtrueでなければなりません。 - SyncPickupは、OnContactEvent()を受信し、OnContactEvent()(通常はContactTriggerから)を受信する必要があります。 - ピックアップオブジェクトには IInventoryable コンポーネント(InventoryContactReactors など)が必要で、衝突するオブジェクトには IInventory(BasicInventory など)コンポーネントが必要です。 - T タイプは一致させます。 - PickupオブジェクトのSyncStateは、IInventory のDefaultMountと一致する有効なMountを定義する必要があります。 - HitGroupMasks は一致する必要があります。
Vitals Contact System
SyncVitalsコンポーネント
IVitalsSystem : IContactSystem
体力、エネルギー、シールド、パワーなどの同期を行うための汎用コンポーネント。 このコンポーネントはContactGroups Systemを利用します。
Type
このバイタルの名前/ID。 内部的には、これは既知のタイプの列挙によって支えられています。 カスタムタイプは、主導でコード化された名前をハッシュ化します。
Start Value
このバイタルがリセットまたは初期化されたときに戻る値。
Full Value
通常の最大値。 実行時にこの値を変更する場合は、Max Value以下でないとシリアライズが中断されます。 現在の値を Overload でフラグを立てることができ、現在の値をFull Valueよりも大きくすることができます (Max Valueよりは小さくする)。
Max Value
最高値。 シリアル化に必要なビット数を決定するために使用します。 そのため、この値は実行時に変えるべきではありません。
Absorption
このバイタルが受けるダメージの割合 残りは次のバイタルに適用されます。
Regen Delay/Rate
ダメージを受けてから、このバイタルが再生を再開するまでにかかる秒数。 レートは1秒間にどれだけの価値が追加されるかを表します。
Decay Delay/Rate
オーバーロード(Full Valueよりも大きな値となること)から、このバイタルがFull Valueへと下がり始めるまでにかかる秒数。レートとは、1秒間にどれだけの値が下がるかを表します。
Auto Despawn
ルートのバイタルが0になると、SyncStateコンポーネントでOnDespawnイベントが発生します。
Reset On Spawn
SyncStateがレスポーンとしてフラグを立てたOnChangeStateコールバックを発行すると、すべてのバイタル値がstart valueに戻されます。
VitalsContactReactorコンポーネント
IContactReactor
VitalsContactReactor
はOnContactEventに応答し、ContactReactorと互換性がある場合、ContactSystemに変更をトリガーします。
Mount System
Mount Managerコンポーネント
Mountコンポーネント
Mount設定
AutoMountHitscanコンポーネント
このコンポーネントは、1ティックごとにヒットスキャンを行い、その親である NetObject/SyncState を、ヒットスキャンで見つかった他の NetObject のマウントに添付します。 主な用途は、オブジェクトをプラットフォームや自動車など、モーションが相対化されるべき移動するオブジェクトに自動的に再親化することです。
オブジェクトを移動する親にマウントすることで、トランスフォームシンクはグローバル空間ではなくローカル空間を使用することができます。 オブジェクトの所有者が異なっていても、それらのオブジェクトは接続されたままになり、レイテンシの違いによる遅延状態になることはありません。
ProjectileとHitscan
SyncCannonコンポーネント
SyncContactScanコンポーネント
Utilities
MaskLogic
このドロワーは、基本的なマスク比較よりも複雑な組み合わせのマスクテストを作成するためにコンポーネントが使用するものです。
ロジックドロップダウンは、適用されるテストを EQUALS、ADD、または ORタイプから選択します。 マスクは、以下から bool 結果を生成します: Evaluate(int mask)