수정중인 페이지 입니다.

실행 제어

개요

SimulationBehaviour(그리고 확장에 의한 NetworkBehaviour) 상속 컴포넌트 코드의 조건부 실행에 사용될 수 있는 속성을 노출합니다.

또한 SimulationBehaviourAttribute는 특정 시뮬레이션 루프(단계) 또는 피어 유형(모드)에 대해 FixedUpdateNetwork() 콜백을 조건부로 비활성화하는 데 사용될 수 있습니다.

메인 화면으로

NetworkRunner 실행 조건

시뮬레이션 단계

이러한 속성은 FixedUpdateNetwork() 콜백 내에서만 유효하며, 전체 시뮬레이션 루프와 관련하여 시뮬레이션 중인 현재 틱에 대한 정보를 가져오는 데 사용할 수 있습니다.

  • Runner.IsResimulation - 현재 틱은 이전에 시뮬레이션되었으며 클라이언트 예측 조정의 일부로 지금 다시 시뮬레이션되고 있습니다.
  • Runner.IsForward - 현재 틱이 처음으로 시뮬레이션되고 있습니다.
  • Runner.IsFirstTick - 현재 틱은 재시뮬레이션 또는 포워드 루프의 첫 번째 틱입니다
  • Runner.IsLastTick - 현재 틱은 재시뮬레이션 또는 포워드 루프의 마지막 틱입니다.
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의 시뮬레이션 루프 동안에 한 번은 재시뮬레이션 루프 동안, 한 번은 포워드 루프 동안 두 번 true 일 수 있습니다. 재시뮬레이션이 가능한 경우(서버 모드 내의 클라이언트) 이러한 속성 정보를 Runner.IsForward 또는 Runner.IsResimulation와 함께 사용해야 합니다

노트: 루프에서 처리 중인 틱이 하나만 있는 경우 시뮬레이션된 틱이 IsFirstTickIsLastTick 모두 될 수 있습니다. 이는 일반적으로 포워드 시뮬레이션 루프의 경우입니다.

메인 화면으로

시뮬레이션 모드 (피어 타입)

이러한 속성들은 Spawned() 호출된 이후 모든 타이밍 세그먼트 내에서 유효합니다.

  • Runner.IsServer - Runner는 모든 유형(전용, 호스트 또는 공유 모드 플러그인)의 서버 피어를 나타냅니다.
  • Runner.IsHost - Runner는 로컬 플레이어와 함께 서버 피어를 나타냅니다.
  • Runner.IsClient - Runner는 로컬 플레이어와 함께 클라이언트 피어를 나타냅니다.
  • Runner.IsPlayer - 러너는 게임 세션에서 플레이어를 나타냅니다. 호스트 및 클라이언트의 경우 True이고, 비호스트 서버의 경우 False입니다.
  • Runner.IsSharedModeMasterClient - (공유 모드에서만 유효) 러너는 마스터 클라이언트로 플래그가 지정됩니다.
public override void FixedUpdateNetwork()
{
  if(Runner.IsServer)
  {
    // Execute code only on the game server
  }
}

메인 화면으로

SimulationBehaviourAttribute

콜백 내부에서 위의 속성을 테스트하는 대신, [SimulationBehaviour] 속성을 가진 FixedUpdateNetwork()를 실행하는 데 있어 전체 SimulationBehaviour 클래스를 조건부로 제외할 수 있습니다.

  • [SimulationBehaviour(Stages= )] - SimulationStages 열거 플래그를 제공하여 재시뮬레이션 루프 또는 전달 루프 중에 FixedUpdateNetwork()를 호출할지 여부를 지정합니다. 기본값 0은 Stages = SimulationStages.Resimulation | SimulationStages.Forward으로 취급됩니다.

  • SimulationBehaviour(Modes= )] - FixedUpdateNetwork()가 특정 피어 유형에서만 호출되어야 하는지를 지정하려면 SimulationModes 열거 플래그를 지정하십시오. 기본값 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는 열거형 플래그이며 서버와 호스트는 별개로 취급됩니다. 모든 서버 유형을 포함하려면 두 서버 유형을 결합합니다(SimulationModes.Server | SimulationModes.Host).

메인 화면으로

시뮬레이션 루프 레퍼런스

Conditionals in relation to Simulation Loop
시뮬레이션 조건이 시뮬레이션 루프와 어떻게 관련되는지 설명

### 연결 유형 조건

이 멤버들은 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.IsServer 또는 Runner.IsClient)이 훨씬 더 적절하기 때문에 이 작업이 필요하지 않습니다. 그러나 싱글 플레이어와 같은 특정 게임 모드에 대한 특수 처리를 원하는 경우도 있습니다.

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.
}

메인 화면으로

NetworkObject 조건

객체 권한 속성

  • 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를 리턴합니다. NetworkObject가 유효하지 않을 수 있으며 이를 고려해야 하는 사용 사례에서는 Object.IsValid를 사용하세요.

메인 화면으로

기타 객체 조건

  • Object.IsValid - 연결된 NetworkObject가 null이 아니고 활성 NetworkRunner에 붙여지지 않음
  • Object.IsInSimulation - 연결된 NetworkObject가 현재 연결된 시뮬레이션 내에서 참여 중
  • Object.IsSceneObject - 연결된 NetworkObjectNetworkRunner.Spawn() 오퍼레이션으로 생성된 것이 아니라 씬의 일부로 네트워크 상태에 붙여짐.

기술문서 TOP으로 돌아가기