このページは編集中です。更新が保留になっている可能性があります。

実行コントロール

概要

SimulationBehaviourおよびNetworkBehaviourの派生コンポーネントは、コードの条件付き実行に使用できるプロパティを公開します。

またSimulationBehaviourAttributeは、特定のシミュレーションループ(Stage)やピアタイプ(Mode)に対して、FixedUpdateNetwork()コールバックを条件付きで完全に無効化するために使用されることもあります。

トップに戻る

Network Runner Conditionals

シミュレーションループ参照

Conditionals in relation to Simulation Loop
NetworkRunner の条件式とシミュレーション・ループの関係

トップに戻る

シミュレーションステージ

これらのプロパティは FixedUpdateNetwork() コールバックの内部でのみ有効で、シミュレーションループ全体に関連してシミュレーションされている現在のティックに関する情報を取得するために使用できます。

  • Runner.IsResimulation: 現在のティックは以前にシミュレーションされたもので、クライアント予測調整の一環として現在再度シミュレーション中。
  • Runner.IsForward: 現在のティックは初回のシミュレーション中。
  • Runner.IsFirstTick: 現在のティックは、ResimulationまたはForward Loopの最初のティック。
  • Runner.IsLastTick: 現在のティックは、ResimulationまたはForward Loopの最後のティック。
public override void FixedUpdateNetwork()
{
  if(Runner.IsResimulation)
  {
    // execute code only if this tick has already been simulated before
  }

  if(Runner.IsForward && Runner.IsFirstTick)
  {
    // execute code only if this is the first tick of the forward simulation loop
  }
}

備考: IsFirstTickIsLastTick はFusionのSimulation Loop中に2回trueになる可能性があります。 再シミュレーションが可能な場合(サーバーモードのクライアント)、これらのプロパティを Runner.IsForward または Runner.IsResimulation と共に使用して、どちらのループかを決定する必要があります。

備考: ループ内で処理されているティックが1つだけの場合、シミュレーションされたティックは IsFirstTickIsLastTick の両方であることが可能です。これは通常、Forward Simulation Loopの場合です。

トップに戻る

シミュレーションモード(ピアタイプ)

これらのプロパティは、Spawned()が呼び出された後のすべてのタイミングセグメントで有効です。

  • Runner.IsServer: Runnerは、あらゆるタイプのサーバーピア(Dedicated、Host、またはShared Modeプラグイン)を表す。
  • Runner.IsHost: Runnerは、サーバーがローカルプレイヤーと対になることを表す。
  • Runner.IsClient: Runnerは、サーバーがクライアントピアと対になることを表す。
  • Runner.IsPlayer: RunnerはGameSessionのPlayerを表す。ホストとクライアントの場合はTrue、非ホストサーバーの場合はFalseとなる。
  • Runner.IsSharedModeMasterClient - (Sharedモードでのみ有効) Runnerがマスタークライアントとしてフラグされる。
public override void FixedUpdateNetwork()
{
  if(Runner.IsServer)
  {
    // Execute code only on the game server
  }
}

トップに戻る

SimulationBehaviourAttribute

コールバック内で上記のプロパティをテストする代わりに、SimulationBehaviourクラス全体を [SimulationBehaviour] 属性を使って FixedUpdateNetwork() の実行から条件付きで除外することも可能です。

  • [SimulationBehaviour(Stages= )]: SimulationStages enum フラグを指定し、FixedUpdateNetwork() が Resimulation Loop と Forward Loop のどちらで呼び出されるかを指定します。デフォルトの0は、Stages = SimulationStages.Resimulation | SimulationStages.Forwardとして扱われます。.
  • SimulationBehaviour(Modes= )]: SimulationModes enum フラグを指定し、FixedUpdateNetwork() が特定のピアタイプでのみ呼び出されるようにするかどうかを指定します。デフォルトの0はすべてのフラグが設定されているものとして扱われます。
[SimulationBehaviour(
  Stages = SimulationStages.Forward,
  Modes  = SimulationModes.Server | SimulationModes.Host
)]
public class TestNetworkBehaviour : NetworkBehaviour, IBeforeAllTicks
{
  public override FixedUpdateNetwork()
  {
    // This will only execute if Runner.IsForward and if Runner.IsServer
  }
}

備考: SimulationModes は enum フラグであり、Server と Host は別物として扱われます。すべてのサーバタイプを含めるには、この2つを結合します (SimulationModes.Server | SimulationModes.Host).

トップに戻る

接続タイプ

これらのメンバーは ConnectionType (Relayed, Direct, None) を返し、クライアントがサーバに直接接続しているか、あるいはメッセージがPhoton Cloudを介してリレーされているかを示します。

  • Runner.CurrentConnectionType: Runnerがクライアントの場合、サーバとの接続のタイプを返す。Runnerがクライアントでない場合は、ConnectionType.None を返す。

  • Runner.GetPlayerConnectionType(PlayerRef player): Runnerがサーバーの場合、これはクライアント (PlayerRef で識別) がこのランナーに対して持っている接続のタイプを返す。Runnerがサーバーでない場合、ConnectionType.None を返す。

public override void Spawned()
{
  if(Runner.CurrentConnectionType == ConnectionType.Relayed)
  {
    // Special handling for cases where messages to and from
    // this peer are being relayed through the Photon server.
  }
}

トップに戻る

ゲームモード (トポロジー)

Runner.GameMode値は、ゲームセッションのトポロジーに基づいて選択的にコードを実行するために使用することができます。ほとんどの場合、このページで説明する他の条件式の方がより適切であるため、これは必要ありません (Runner.IsServerRunner.IsClient など)。しかし、Single Playerのような特定のゲームモードに対して特別な処理を行う場合もあります。

if(Runner.GameMode == GameMode.Single)
{
  // Execute code only if in running as single player
  // Note that this value can be cached,
  // as it cannot change once the Runner has been started.
}

if(Runner.GameMode == GameMode.Shared)
{
  // Execute code only if running in shared mode.
  // Typically this is only useful for testing,
  // if you have code designed to work in both Server and Shared Modes.
}

トップに戻る

ネットワークオブジェクト条件式

オブジェクト権限

  • HasStateAuthority: 関連する Object.Runner はこの NetworkObject に対するステート権限がある。
  • HasInputAuthority: 関連する Object.Runner はこの NetworkObject に対する入力権限がある。
  • IsProxy:関連する NetworkRunner は、この NetworkObject に対して入力権限もステート権限もない。(このオブジェクトの入力は、このピアでは利用できません)。
if(HasStateAuthority)
{
  // Execute only if the associated Runner has state authority over this object
}

備考: これらのプロパティは、関連する NetworkObject が有効である場合にのみ有効です(NetworkObject ごとの権限。オブジェクトが有効でない場合、これらのプロパティは例外やログ警告を発生させることなく、すべて false を返します。ネットワークオブジェクトが無効である可能性があり、それを考慮する必要がある場合は、Object.IsValidを使用してください。

トップに戻る

その他のオブジェクト条件式

  • Object.IsValid: 関連するNetworkObjectはNULLではなく、アクティブな NetworkRunner にアタッチされる。
  • Object.IsInSimulation: 関連するNetworkObjectは現在、その関連するSimulationに参加している。
  • Object.IsSceneObject: 関連する NetworkObject が、NetworkRunner.Spawn() 操作で作成されたのではなく、シーンの一部としてネットワーク状態にアタッチされていた。

ドキュメントのトップへ戻る