public static GameObject Instantiate(GameObject original, Vector3 position, Quaternion rotation, Transform parent) { if (original == null) { throw new System.Exception("The gameobject you want instantiate is null"); } if (parent == null) { throw new System.Exception("The parent transform is null"); } #if UNITY_EDITOR if (UseAssetDatabase) { EnsureAssetDatabase(); return(GameObject.Instantiate(original, position, rotation, parent)); } #endif if (!Initialized) { throw new System.Exception("BundleManager not initialized, try initialize first!"); } var id = original.GetInstanceID(); if (original.scene.name != null || !s_TrackingObjects.TryGetValue(id, out var tracking)) { throw new System.Exception("Object must be valid bundle object"); } var instantiated = GameObject.Instantiate(original, position, rotation, parent); var tupleKey = new TupleObjectKey(instantiated, original); s_TrackingOwners.Add(tupleKey, new TrackingOwner(instantiated, original)); tracking.RefCount++; //increase refCount s_TrackingObjects[id] = tracking; return(instantiated); }
public static T TrackObjectWithOwner <T>(GameObject owner, T loaded) where T : Object { #if UNITY_EDITOR if (UseAssetDatabase) { return(loaded); //always valid on assetdatabase mode } #endif if (owner.scene.name == null) { throw new System.Exception("GameObject is not instantiated one"); } var id = loaded.GetInstanceID(); if (!s_TrackingObjects.TryGetValue(id, out var tracking)) { throw new System.Exception("Original Object is not tracked"); } var tupleKey = new TupleObjectKey(owner, loaded); if (s_TrackingOwners.ContainsKey(tupleKey)) { throw new System.Exception("Already Tracked by this combination"); } s_TrackingOwners.Add(tupleKey, new TrackingOwner(owner, loaded)); tracking.RefCount++; //increase refCount s_TrackingObjects[id] = tracking; return(loaded); }
public static bool UntrackObjectWithOwner(GameObject owner, Object loaded) { var tupleKey = new TupleObjectKey(owner, loaded); if (!s_TrackingOwners.TryGetValue(tupleKey, out var tracking)) { return(false); //is not tracking combination } s_TrackingOwners.Remove(tupleKey); UntrackObjectInternal(tracking.Child); return(true); }
public static bool UntrackObjectWithOwner(GameObject owner, Object loaded) { #if UNITY_EDITOR if (UseAssetDatabase) { return(true); //always valid on assetdatabase mode } #endif var tupleKey = new TupleObjectKey(owner, loaded); if (!s_TrackingOwners.TryGetValue(tupleKey, out var tracking)) { return(false); //is not tracking combination } s_TrackingOwners.Remove(tupleKey); UntrackObjectInternal(tracking.Child); return(true); }
public static GameObject Instantiate(GameObject original, Vector3 position, Quaternion rotation, Transform parent) { #if UNITY_EDITOR if (UseAssetDatabase) { return(GameObject.Instantiate(original, position, rotation, parent)); } #endif var id = original.GetInstanceID(); if (original.scene.name != null || !s_TrackingObjects.TryGetValue(id, out var tracking)) { throw new System.Exception("Object must be valid bundle object"); } var instantiated = GameObject.Instantiate(original, position, rotation, parent); var tupleKey = new TupleObjectKey(instantiated, original); s_TrackingOwners.Add(tupleKey, new TrackingOwner(instantiated, original)); tracking.RefCount++; //increase refCount s_TrackingObjects[id] = tracking; return(instantiated); }