示例#1
0
        // ------------------ server message handlers -------------------

        internal static void OnAnimationServerMessage(NetworkMessage netMsg)
        {
            AnimationMessage msg = netMsg.ReadMessage <AnimationMessage>();

            if (LogFilter.Debug)
            {
                Debug.Log("OnAnimationMessage for netId=" + msg.netId + " conn=" + netMsg.conn);
            }

            GameObject go = NetworkServer.FindLocalObject(msg.netId);

            if (go == null)
            {
                return;
            }
            NetworkAnimator animSync = go.GetComponent <NetworkAnimator>();

            if (animSync != null)
            {
                NetworkReader reader = new NetworkReader(msg.parameters);
                animSync.HandleAnimMsg(msg, reader);

                NetworkServer.SendToReady(go, (short)MsgType.Animation, msg);
            }
        }
示例#2
0
        public NetworkIdentity ReadNetworkIdentity()
        {
            NetworkInstanceId netId = ReadNetworkId();

            if (netId.IsEmpty())
            {
                return(null);
            }
            GameObject go;

            if (NetworkServer.active)
            {
                go = NetworkServer.FindLocalObject(netId);
            }
            else
            {
                go = ClientScene.FindLocalObject(netId);
            }
            if (go == null)
            {
                if (LogFilter.logDebug)
                {
                    Debug.Log("ReadNetworkIdentity netId:" + netId + "go: null");
                }
                return(null);
            }

            return(go.GetComponent <NetworkIdentity>());
        }
示例#3
0
        public NetworkIdentity ReadNetworkIdentity()
        {
            uint netId = ReadPackedUInt32();

            if (netId == 0)
            {
                return(null);
            }
            GameObject go;

            if (NetworkServer.active)
            {
                go = NetworkServer.FindLocalObject(netId);
            }
            else
            {
                go = ClientScene.FindLocalObject(netId);
            }
            if (go == null)
            {
                if (LogFilter.Debug)
                {
                    Debug.Log("ReadNetworkIdentity netId:" + netId + "go: null");
                }
                return(null);
            }

            return(go.GetComponent <NetworkIdentity>());
        }
示例#4
0
        public GameObject ReadGameObject()
        {
            uint netId = ReadPackedUInt32();

            if (netId == 0)
            {
                return(null);
            }

            GameObject go;

            if (NetworkServer.active)
            {
                go = NetworkServer.FindLocalObject(netId);
            }
            else
            {
                go = ClientScene.FindLocalObject(netId);
            }
            if (go == null)
            {
                if (LogFilter.Debug)
                {
                    Debug.Log("ReadGameObject netId:" + netId + "go: null");
                }
            }

            return(go);
        }
示例#5
0
        internal static void HandleChildTransform(NetworkMessage netMsg)
        {
            LocalChildTransformMessage message = netMsg.ReadMessage <LocalChildTransformMessage>();

            GameObject foundObj = NetworkServer.FindLocalObject(message.netId);

            if (foundObj == null)
            {
                Debug.LogError("Received NetworkTransformChild data for GameObject that doesn't exist");
                return;
            }
            var children = foundObj.GetComponents <NetworkTransformChild>();

            if (children == null || children.Length == 0)
            {
                Debug.LogError("HandleChildTransform no children");
                return;
            }
            if (message.childIndex >= children.Length)
            {
                Debug.LogError("HandleChildTransform childIndex invalid");
                return;
            }

            NetworkTransformChild foundSync = children[message.childIndex];

            if (foundSync == null)
            {
                Debug.LogError("HandleChildTransform null target");
                return;
            }
            if (!foundSync.localPlayerAuthority)
            {
                Debug.LogError("HandleChildTransform no localPlayerAuthority");
                return;
            }

            if (!netMsg.conn.clientOwnedObjects.Contains(message.netId))
            {
                Debug.LogWarning("NetworkTransformChild netId:" + message.netId + " is not for a valid player");
                return;
            }

            foundSync.UnserializeModeTransform(new NetworkReader(message.payload), false);
            foundSync.m_LastClientSyncTime = Time.time;

            if (!foundSync.isClient)
            {
                // dedicated server wont interpolate, so snap.
                foundSync.m_Target.localPosition = foundSync.m_TargetSyncPosition;
                foundSync.m_Target.localRotation = foundSync.m_TargetSyncRotation3D;
            }
        }
示例#6
0
 protected virtual void Dispose(bool disposing)
 {
     if (clientOwnedObjects != null)
     {
         foreach (var netId in clientOwnedObjects)
         {
             var obj = NetworkServer.FindLocalObject(netId);
             if (obj != null)
             {
                 obj.GetComponent <NetworkIdentity>().ClearClientOwner();
             }
         }
     }
     clientOwnedObjects = null;
 }
        void ShowServerConnections()
        {
            m_ShowServerConnections = EditorGUILayout.Foldout(m_ShowServerConnections, m_ShowServerConnectionsLabel);
            if (m_ShowServerConnections)
            {
                EditorGUI.indentLevel += 1;

                // ensure arrays of bools exists and are large enough
                if (m_ShowDetailForConnections == null)
                {
                    m_ShowDetailForConnections  = new List <bool>();
                    m_ShowPlayersForConnections = new List <bool>();
                    m_ShowVisibleForConnections = new List <bool>();
                    m_ShowOwnedForConnections   = new List <bool>();
                }
                while (m_ShowDetailForConnections.Count < NetworkServer.connections.Count)
                {
                    m_ShowDetailForConnections.Add(false);
                    m_ShowPlayersForConnections.Add(false);
                    m_ShowVisibleForConnections.Add(false);
                    m_ShowOwnedForConnections.Add(false);
                }

                // all connections
                int index = 0;
                foreach (var con in NetworkServer.connections)
                {
                    if (con == null)
                    {
                        index += 1;
                        continue;
                    }

                    m_ShowDetailForConnections[index] = EditorGUILayout.Foldout(m_ShowDetailForConnections[index], "Conn: " + con.connectionId + " (" + con.address + ")");
                    if (m_ShowDetailForConnections[index])
                    {
                        EditorGUI.indentLevel += 1;

                        m_ShowPlayersForConnections[index] = EditorGUILayout.Foldout(m_ShowPlayersForConnections[index], "Players");
                        if (m_ShowPlayersForConnections[index])
                        {
                            EditorGUI.indentLevel += 1;
                            foreach (var player in con.playerControllers)
                            {
                                EditorGUILayout.ObjectField("Player: " + player.playerControllerId, player.gameObject, typeof(GameObject), true);
                            }
                            EditorGUI.indentLevel -= 1;
                        }

                        m_ShowVisibleForConnections[index] = EditorGUILayout.Foldout(m_ShowVisibleForConnections[index], "Visible Objects");
                        if (m_ShowVisibleForConnections[index])
                        {
                            EditorGUI.indentLevel += 1;
                            foreach (var v in con.visList)
                            {
                                EditorGUILayout.ObjectField("NetId: " + v.netId, v, typeof(NetworkIdentity), true);
                            }
                            EditorGUI.indentLevel -= 1;
                        }

                        if (con.clientOwnedObjects != null)
                        {
                            m_ShowOwnedForConnections[index] = EditorGUILayout.Foldout(m_ShowOwnedForConnections[index], "Owned Objects");
                            if (m_ShowOwnedForConnections[index])
                            {
                                EditorGUI.indentLevel += 1;
                                foreach (var netId in con.clientOwnedObjects)
                                {
                                    var obj = NetworkServer.FindLocalObject(netId);
                                    EditorGUILayout.ObjectField("Owned: " + netId, obj, typeof(NetworkIdentity), true);
                                }
                                EditorGUI.indentLevel -= 1;
                            }
                        }
                        EditorGUI.indentLevel -= 1;
                    }
                    index += 1;
                }
                EditorGUI.indentLevel -= 1;
            }
        }