5 using System.Collections.Generic;
33 private List<PrefabToDataModel> spawnablePrefabs = null;
35 private Dictionary<string, GameObject> typeToPrefab;
41 private int objectCreationCounter;
50 private void InitializePrefabs()
52 typeToPrefab =
new Dictionary<string, GameObject>(spawnablePrefabs.Count);
53 for (
int i = 0; i < spawnablePrefabs.Count; i++)
55 typeToPrefab.Add(spawnablePrefabs[i].DataModelClassName, spawnablePrefabs[i].Prefab);
61 GameObject prefab = GetPrefab(spawnedObject, null);
68 GameObject parent = null;
69 if (!
string.IsNullOrEmpty(spawnedObject.
ParentPath.Value))
71 parent = GameObject.Find(spawnedObject.
ParentPath.Value);
74 Debug.LogErrorFormat(
"Parent object '{0}' could not be found to instantiate object.", spawnedObject.
ParentPath);
79 CreatePrefabInstance(spawnedObject, prefab, parent, spawnedObject.
Name.Value);
93 string instanceName =
string.Format(
"{0}{1}_{2}", baseName, objectCreationCounter.ToString(), NetworkManager.AppInstanceUniqueId);
94 objectCreationCounter++;
100 return dataModel.GetType().
Name;
105 GameObject prefabToSpawn;
106 string dataModelTypeName = GetPrefabLookupKey(dataModel, baseName);
107 if (dataModelTypeName == null || !typeToPrefab.TryGetValue(dataModelTypeName, out prefabToSpawn))
109 Debug.LogErrorFormat(
"Trying to instantiate an object from unregistered data model {0}.", dataModelTypeName);
112 return prefabToSpawn;
129 public bool Spawn(
SyncSpawnedObject dataModel, Vector3 localPosition, Quaternion localRotation, Vector3? localScale, GameObject parent,
string baseName,
bool isOwnedLocally)
131 if (SyncSource == null)
133 Debug.LogError(
"Can't spawn an object: PrefabSpawnManager is not initialized.");
137 if (dataModel == null)
139 Debug.LogError(
"Can't spawn an object: dataModel argument is null.");
149 GameObject prefabToSpawn = GetPrefab(dataModel, baseName);
156 string instanceName = CreateInstanceName(baseName);
159 dataModel.
Initialize(instanceName, parent.transform.GetFullPath(
"/"));
160 dataModel.
Transform.Position.Value = localPosition;
161 dataModel.
Transform.Rotation.Value = localRotation;
162 if (localScale.HasValue)
164 dataModel.
Transform.Scale.Value = localScale.Value;
168 dataModel.
Transform.Scale.Value = prefabToSpawn.transform.localScale;
177 SyncSource.AddObject(dataModel, owner);
194 public bool Spawn(
SyncSpawnedObject dataModel, Vector3 localPosition, Quaternion localRotation, GameObject parent,
string baseName,
bool isOwnedLocally)
196 return Spawn(dataModel, localPosition, localRotation, null, parent, baseName, isOwnedLocally);
201 SyncSource = NetworkManager.Root.InstantiatedPrefabs;
206 SyncSource.RemoveObject(objectToDelete);
219 GameObject instance = Instantiate(prefabToInstantiate, dataModel.
Transform.Position.Value, dataModel.
Transform.Rotation.Value);
220 instance.transform.localScale = dataModel.
Transform.Scale.Value;
221 instance.transform.SetParent(parentObject.transform,
false);
222 instance.gameObject.name = objectName;
228 if (syncModelAccessors.Length <= 0)
235 for (
int i = 0; i < syncModelAccessors.Length; i++)