示例#1
0
        protected override void ProcessPacket(Event netEvent)
        {
            byte channel = netEvent.ChannelID;

            m_buffer = netEvent.Packet.GetBufferFromPacket(m_buffer);
            var buffer = m_buffer;
            var header = m_buffer.GetEntityHeader();
            var op     = header.OpCode;
            var id     = header.ID;

            NetworkedObject nobj = null;

            switch (op)
            {
            case OpCodes.Spawn:
                nobj = SpawnNetworkedObject(id, buffer);
                break;

            case OpCodes.BulkSpawn:
                var cnt = m_buffer.ReadInt();
                for (int i = 0; i < cnt; i++)
                {
                    header = m_buffer.GetEntityHeader();
                    SpawnNetworkedObject(header.ID, buffer);
                }
                break;

            case OpCodes.Destroy:
                if (m_peers.TryGetValue(id, out nobj) && nobj.ID == id)
                {
                    m_peers.Remove(id);
                    Destroy(nobj.gameObject);
                }
                break;

            case OpCodes.PositionUpdate:
            case OpCodes.SyncUpdate:
                if (m_peers.TryGetValue(id, out nobj))
                {
                    nobj.ProcessPacket(op, buffer);
                }
                else
                {
                    Debug.LogWarning($"Unable to locate entity ID: {id}");
                }
                break;
            }
        }