public static RMPNetworkView Replicate(string prefabName, RMPPeer to = null) { if (!NetworkService.IsServer) { Debug.LogError("Only server can replicate RMP object. Replication aborted."); return(null); } var target = System.Array.Find(_instance._replicateTable, prefab => prefab.name.Equals(prefabName)); if (target != null) { // view 의 Awake 가 호출되고 새 guid 가 부여됨. var instance = Instantiate(target); // 직렬화 되지 않는 멤버변수는 instantiate 할 때 복사되지 않음. instance.ReplicationTableIndex = target.ReplicationTableIndex; // null 일 경우 모두에게, 아닐 경우 해당 세션에게만. if (to == null) { var cls = RMPPeer.ClientPeers; if (cls != null) { foreach (var peer in cls.Values) { peer.SendReplicate(instance); } } } else { to.SendReplicate(instance); } return(instance); } else { Debug.LogError(string.Format("Replicate target not found by its name \'{0}\'.", prefabName)); return(null); } }
public static RMPNetworkView Replicate(int index, RMPPeer to = null) { if (!NetworkService.IsServer) { Debug.LogError("Only server can replicate RMP object. Replication aborted."); return(null); } try { var target = _instance._replicateTable[index]; var instance = Instantiate(target); instance.ReplicationTableIndex = target.ReplicationTableIndex; if (to == null) { var cls = RMPPeer.ClientPeers; if (cls != null) { foreach (var peer in cls.Values) { peer.SendReplicate(instance); } } } else { to.SendReplicate(instance); } return(instance); } catch (Exception error) { Debug.LogError(error); return(null); } }
public static void Replicate(RMPNetworkView view, RMPPeer to = null) { if (!NetworkService.IsServer) { Debug.LogError("Only server can replicate RMP object. Replication aborted."); return; } if (to == null) { var cls = RMPPeer.ClientPeers; if (cls != null) { foreach (var peer in cls.Values) { peer.SendReplicate(view); } } } else { to.SendReplicate(view); } }