This document is about: FUSION 1
SWITCH TO

수정중인 페이지 입니다.

시뮬레이션 동작

개요

SimulationBehaviour는 Fusion 네트워크 시뮬레이션 루프와 관련된 동작의 기본 클래스입니다. 시뮬레이션 상태에 속하거나 영향을 미치는 모든 행동은 MonoBehaviour가 아닌 SimulationBehaviour에서 파생되어야 합니다.

NetworkBehaviour와 달리 SimulationBehaviour[Networked] 상태가 될 수 없습니다. 따라서 Fusion 시뮬레이션 루프를 기반으로 실행해야 하지만 자체 상태를 동기화할 필요는 없는 동작에 적합합니다.

주의: SimulationBehaviourNetworkBehaviour[Networked] 상태를 변경할 수 있습니다.

NetworkBehaviour[Networked] 상태에 해당하거나 Fusion 업데이트 루프의 일부로 실행되어야 하는 모든 로직은 FixedUpdateNetwork()에서 구현되어야 합니다.

네트워크 객체

모든 SimulationBehaviour 컴포넌트는 Object 속성을 통해 관련된 NetworkObject에 접근할 수 있습니다.

스폰 및 스폰 해제

SimulationBehaviour내의 Spawned()Despawned() 메소드를 구현하기 위해서는, ISpawnedIDespawned 인터페이스를 각각 구현해야 합니다.

예제

예를 들어, Tanknarok 샘플의 LevelManager는 파워업을 스폰 합니다. 비록 파워업은 NetworkObject이지만, LevelManager는 시뮬레이션 상태에 영향을 주고 알고 있어야만 동작을 실행할 수 있습니다. 따라서 SimulationBehaviour에서 상속받는 것이 올바른 접근법입니다.

C#

public class LevelManager : SimulationBehaviour
{
    [SerializeField] private float _powerupDelay;
    [SerializeField] private NetworkObject _powerupPrefab;

    private TickTimer _powerupTimer;
    
    public override void FixedUpdateNetwork()
    {
        // All of the level management logic happens server-side, so bail if we're not the server.
        if (!Object.HasStateAuthority) return;

        // Only active duty of the LevelManager is to spawn powerups whenever the timer expires
        if (_powerupTimer.ExpiredOrNotRunning(Runner)) 
        {
            // Reset timer, and check if there is a free spot to spawn a new powerup
            _powerupTimer = TickTimer.CreateFromSeconds(Runner,_powerupDelay);
            SpawnPoint spawnPoint = GetSpawnPoint(SpawnPoint.Type.Powerup);
            
            if (spawnPoint != null) 
            {
                Debug.Log("Spawning Powerup");
                NetworkObject powerupobj = Runner.Spawn(_powerupPrefab, spawnPoint.transform.position, spawnPoint.transform.rotation, PlayerRef.None);
                powerupobj.GetComponent<Powerup>().Init();
            } 
            else 
            {
                Debug.Log("Not Spawning Powerup - no free spot");
            }
        }
    }    
}

동작이 [Networked] 속성을 보유해야 하는 경우 대신 NetworkBehaviour에서 상속받아야 합니다.

Back to top