static void OnSpawnSceneObject(NetworkMessage netMsg) { SpawnSceneObjectMessage msg = new SpawnSceneObjectMessage(); netMsg.ReadMessage(msg); if (LogFilter.logDebug) { Debug.Log("Client spawn scene handler instantiating [netId:" + msg.netId + " sceneId:" + msg.sceneId + " pos:" + msg.position); } #if UNITY_EDITOR UnityEditor.NetworkDetailStats.IncrementStat( UnityEditor.NetworkDetailStats.NetworkDirection.Incoming, (short)MsgType.SpawnSceneObject, "sceneId", 1); #endif NetworkIdentity localNetworkIdentity; if (s_NetworkScene.GetNetworkIdentity(msg.netId, out localNetworkIdentity)) { // this object already exists (was in the scene) localNetworkIdentity.Reset(); ApplySpawnPayload(localNetworkIdentity, msg.position, msg.payload, msg.netId, localNetworkIdentity.gameObject); return; } NetworkIdentity spawnedId = SpawnSceneObject(msg.sceneId); if (spawnedId == null) { if (LogFilter.logError) { Debug.LogError("Spawn scene object not found for " + msg.sceneId + " SpawnableObjects.Count=" + s_SpawnableObjects.Count); // dump the whole spawnable objects dict for easier debugging foreach (var kvp in s_SpawnableObjects) { Debug.Log("Spawnable: SceneId=" + kvp.Key + " name=" + kvp.Value.name); } } return; } if (LogFilter.logDebug) { Debug.Log("Client spawn for [netId:" + msg.netId + "] [sceneId:" + msg.sceneId + "] obj:" + spawnedId.gameObject.name); } spawnedId.Reset(); ApplySpawnPayload(spawnedId, msg.position, msg.payload, msg.netId, spawnedId.gameObject); }
internal void DestroyAllClientObjects() { foreach (NetworkInstanceId id in this.m_LocalObjects.Keys) { NetworkIdentity identity = this.m_LocalObjects[id]; if (((identity != null) && (identity.gameObject != null)) && !InvokeUnSpawnHandler(identity.assetId, identity.gameObject)) { if (identity.sceneId.IsEmpty()) { UnityEngine.Object.Destroy(identity.gameObject); } else { identity.Reset(); identity.gameObject.SetActive(false); } } } this.ClearLocalObjects(); }
private static void DestroyObject(NetworkIdentity uv, bool destroyServerObject) { if (LogFilter.logDebug) { Debug.Log("DestroyObject instance:" + uv.netId); } if (objects.ContainsKey(uv.netId)) { objects.Remove(uv.netId); } if (uv.clientAuthorityOwner != null) { uv.clientAuthorityOwner.RemoveOwnedObject(uv); } NetworkDetailStats.IncrementStat(NetworkDetailStats.NetworkDirection.Outgoing, 1, uv.assetId.ToString(), 1); ObjectDestroyMessage msg = new ObjectDestroyMessage { netId = uv.netId }; SendToObservers(uv.gameObject, 1, msg); uv.ClearObservers(); if (NetworkClient.active && instance.m_LocalClientActive) { uv.OnNetworkDestroy(); ClientScene.SetLocalObject(msg.netId, null); } if (destroyServerObject) { UnityEngine.Object.Destroy(uv.gameObject); } uv.Reset(); }