/// <summary> /// Called by the server on the clients to instantiate a Synchronized GameObject /// </summary> private void InstantiateSyncObject(string _prefabName, string _GUID, Vector3 _position, Quaternion _rotation, string _parentName = null) { if (string.IsNullOrEmpty(_GUID)) { Debug.LogError("You tried to instantiate a Game Object without a GUID"); return; } if (Resources.Load <GameObject>(_prefabName) == null) { Debug.LogError($"Can't find any {_prefabName} prefab in the Resources Folder"); return; } Transform parent = null; if (!string.IsNullOrEmpty(_parentName)) { parent = GameObject.Find(_parentName).transform; } GameObject instance = Instantiate(Resources.Load <GameObject>(_prefabName), _position, _rotation, parent) as GameObject; SyncMonoBehaviour SMB = instance.GetComponent <SyncMonoBehaviour>(); SMB.InitializeGUID(_GUID); NetworkSynchronizer.Instance.AddSynchronizeObject(SMB); Debug.Log($"Instantiating {_prefabName} under {_parentName} at ({_position}), {_rotation} with GUID({_GUID})", instance); if (SMB == null) { Debug.LogError("You tried to instantiate a prefab which does not have a SyncMonoBehaviour"); Destroy(instance); return; } OnInstantiate?.Invoke(SMB.gameObject); }
//Send to server an object that has moved public void SyncUp(SyncMonoBehaviour SMB) { Debug.Log($"{SMB.name} has moved locally, synchro up"); NetworkManager.Instance.SendNetworkMessageToServer(new SNetworkMessage(EMessageType.UpdateTransform, JsonUtility.ToJson(new SMessageUpdateTransform(SMB.GUID, SMB.transform.position, SMB.transform.rotation, SMB.transform.localScale)))); }
public void AddSynchronizeObject(SyncMonoBehaviour _SMB) { synchronizedObjects.Add(_SMB.GUID, _SMB); Debug.Log($"Adding {_SMB.name} ({_SMB.GUID}) to synchronized objects", _SMB); }