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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 4
0
        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);
        }