private void SpawnSyncedObject(PacketBuffer buffer) { // Read prefab ID int prefabID = buffer.ReadInteger(); // Spawn the requested prefab GameObject prefab = registry.GetPrefab(prefabID); GameObject go = Instantiate(prefab); // Set the ID from the received server data SyncedEntity entity = go.GetComponent <SyncedEntity>(); int entityID = buffer.ReadInteger(); entity.ID = entityID; // Set the transform properties. Transform goTransform = go.transform; goTransform.position = buffer.ReadVector3(); goTransform.rotation = Quaternion.Euler(buffer.ReadVector3()); goTransform.localScale = buffer.ReadVector3(); syncedEntities.Add(entity); buffer.Dispose(); }
public void SpawnObject(GameObject prefab, Vector3 position, Vector3 rotation, Vector3 scale) { // Spawn object, set script IDs and add them to the synced list. GameObject go = Instantiate(prefab, position, Quaternion.Euler(rotation)); SyncedEntity entity = go.GetComponent <SyncedEntity>(); entity.ID = syncedEntityID; syncedEntityID++; syncedEntities.Add(entity); // Send the spawndata to all clients. PacketBuffer buffer = new PacketBuffer(); int prefabID = registryPrefab.GetPrefabID(prefab); buffer.WriteInteger((int)ServerPackets.SSpawnObject); buffer.WriteInteger(prefabID); buffer.WriteInteger(entity.ID); buffer.WriteVector3(position); buffer.WriteVector3(rotation); buffer.WriteVector3(scale); serverTCP.SendData(buffer.ToArray()); buffer.Dispose(); }
private void DestroySyncedObejct(PacketBuffer buffer) { int entityID = buffer.ReadInteger(); SyncedEntity entityToDestroy = GetSyncedEntity(entityID); syncedEntities.Remove(entityToDestroy); Destroy(entityToDestroy.gameObject); buffer.Dispose(); }
private void DeserializeFrame(PacketBuffer buffer) { int numEntities = buffer.ReadInteger(); for (int i = 0; i < numEntities; i++) { // Read entity ID, and get it form the list. int entityID = buffer.ReadInteger(); SyncedEntity entity = GetSyncedEntity(entityID); // Deserialize all behaviours foreach (var syncedBehaviour in entity.syncedBehaviours) { int dataSize = buffer.ReadInteger(); byte[] data = buffer.ReadBytes(dataSize); syncedBehaviour.Deserialize(data); } } buffer.Dispose(); }
public void DestroyObject(int entityID) { SyncedEntity entityToDestroy = GetEntity(entityID); if (entityToDestroy == null) { Debug.LogWarningFormat("Entity with ID {0} does not exist and cannot be destroyed.", entityID); return; } syncedEntities.Remove(entityToDestroy); Destroy(entityToDestroy.gameObject); PacketBuffer buffer = new PacketBuffer(); buffer.WriteInteger((int)ServerPackets.SDestroyObject); buffer.WriteInteger(entityID); serverTCP.SendData(buffer.ToArray()); buffer.Dispose(); }