Network Object Destroy 방법(1) / Destroy
그냥 Destroy하면 안된다
[ClientRpc] 속성을 이용해야함
Network Object Destroy 방법(2) / Despawn
NetworkObject Component가 있는 경우 가능하며
Spawn()한 오브젝트 상대로 가능
그냥 Instantiate로 소환한 애를 Despawn하려고 하면 위와 같은 에러 발생
Network Object Spawn 하는방법(1) / Spawn
var go = Instantiate(ParticleEffect, transform.position, Quaternion.identity);
go.GetComponent<NetworkObject>().Spawn();
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는 클라이언트만 들을 수 있는 메세지이다