유니티 NGO 헷갈리는 부분 적어두기

Network Object Destroy 방법(1) / Destroy

그냥 Destroy하면 안된다

[ClientRpc] 속성을 이용해야함

 


Network Object Destroy 방법(2) / Despawn

NetworkObject Component가 있을 때 가능

NetworkObject Component가 있는 경우 가능하며

Spawn()한 오브젝트 상대로 가능

그냥 Instantiate로 소환한 애를 Despawn하려고 하면 위와 같은 에러 발생

 


Network Object Spawn 하는방법(1) / Spawn

	var go = Instantiate(ParticleEffect, transform.position, Quaternion.identity);
        go.GetComponent<NetworkObject>().Spawn();

꼭 NetworkPrefab에 등록해놔야함!

NetworkManager에 NetworkPrefabs에 등록해놔야 Spawn이 가능함

NetworkObject컴포넌트를 꼭 가지고 있어야함!


Network Object Spawn 하는방법(2) / 시간동기화

    public NetworkObject ParticleEffect;

    public List<NetworkObject> psList;

    public void ClientCreateSyncedEffect()
    {
        var time = NetworkManager.LocalTime.Time;
        CreateSyncedEffectServerRpc(time);
    }

    private IEnumerator WaitAndSpawnSyncedEffect(float timeToWait)
    {
        if (timeToWait > 0)
        {
            yield return new WaitForSeconds(timeToWait);
        }

        var go = Instantiate(ParticleEffect, transform.position, Quaternion.identity);
        psList.Add(go);
    }

    [ServerRpc]
    private void CreateSyncedEffectServerRpc(double time)
    {
        CreateSyncedEffectClientRpc(time); 
        var timeToWait = time - NetworkManager.ServerTime.Time;
        
        StartCoroutine(WaitAndSpawnSyncedEffect((float)timeToWait));
    }
    
    [ClientRpc]
    private void CreateSyncedEffectClientRpc(double time)
    {
        if (IsOwner == false)
        {
            var timeToWait = time - NetworkManager.ServerTime.Time;
            StartCoroutine(WaitAndSpawnSyncedEffect((float)timeToWait)); 
        }
    }

 


NetworkVariable은 실시간 동기화 된다!

NetworkVariable변수는 따로 RPC없이 값을 변경해도 동기화 된다!

반대로 일반 변수들은 RPC를 이용하면 된다!

 

ServerRpc/ClientRpc

ServerRpc는 서버만 들을 수 있는 메세지고

ClientRpc는 클라이언트만 들을 수 있는 메세지이다