示例#1
0
        public void RemoveInvalidKeys()
        {
            var newRefId = new ES3RefIdDictionary();

            foreach (var kvp in refId)
            {
                var obj = kvp.Key;
                if (obj == null)
                {
                    continue;
                }

                if ((((obj.hideFlags & HideFlags.DontSave) == HideFlags.DontSave) ||
                     ((obj.hideFlags & HideFlags.DontSaveInBuild) == HideFlags.DontSaveInBuild) ||
                     ((obj.hideFlags & HideFlags.DontSaveInEditor) == HideFlags.DontSaveInEditor) ||
                     ((obj.hideFlags & HideFlags.HideAndDontSave) == HideFlags.HideAndDontSave)))
                {
                    var type = obj.GetType();
                    // Meshes are marked with HideAndDontSave, but shouldn't be ignored.
                    if (type != typeof(Mesh) && type != typeof(Material))
                    {
                        continue;
                    }
                }
                newRefId.Add(obj, kvp.Value);
            }
            refId = newRefId;
        }
示例#2
0
        public void GeneratePrefabReferences()
        {
            if (this.gameObject.scene.name != null)
            {
                return;
            }

            // Create a new reference list so that any objects which are no longer dependencies are removed.
            var tempLocalRefs = new ES3RefIdDictionary();

            // Add the GameObject's dependencies to the reference list.
            foreach (var obj in ES3ReferenceMgr.CollectDependencies(this.gameObject))
            {
                var dependency = (UnityEngine.Object)obj;
                if (obj == null || !ES3ReferenceMgr.CanBeSaved(dependency))
                {
                    continue;
                }

                var id = Get(dependency);
                // If we're adding a new reference, do an Undo.RecordObject to ensure it persists.
                if (id == -1)
                {
                    Undo.RecordObject(this, "Update Easy Save 3 Prefab");
                    EditorUtility.SetDirty(this);
                }
                tempLocalRefs.Add(dependency, id == -1 ? GetNewRefID() : id);
            }

            localRefs = tempLocalRefs;
        }
示例#3
0
        public void GeneratePrefabReferences()
        {
#if UNITY_2018_3_OR_NEWER
            if (this.gameObject.scene.name != null || UnityEditor.Experimental.SceneManagement.PrefabStageUtility.GetCurrentPrefabStage() != null)
#else
            if (this.gameObject.scene.name != null)
#endif
            { return; }

            // Create a new reference list so that any objects which are no longer dependencies are removed.
            var tempLocalRefs = new ES3RefIdDictionary();

            // Get dependencies of children also.
            var transforms = GetComponentsInChildren <Transform>();
            var gos        = new GameObject[transforms.Length];
            for (int i = 0; i < transforms.Length; i++)
            {
                gos[i] = transforms[i].gameObject;
            }

            bool addedNewReference = false;

            // Add the GameObject's dependencies to the reference list.
            foreach (var obj in ES3ReferenceMgr.CollectDependencies(gos))
            {
                var dependency = (UnityEngine.Object)obj;
                if (obj == null || !ES3ReferenceMgr.CanBeSaved(dependency))
                {
                    continue;
                }

                var id = Get(dependency);
                // If we're adding a new reference, do an Undo.RecordObject to ensure it persists.
                if (id == -1)
                {
                    addedNewReference = true;
                    Undo.RecordObject(this, "Update Easy Save 3 Prefab");
                    EditorUtility.SetDirty(this);
                }
                tempLocalRefs.Add(dependency, id == -1 ? GetNewRefID() : id);
            }

            if (addedNewReference || tempLocalRefs.Count != localRefs.Count)
            {
                localRefs = tempLocalRefs;
            }
        }
示例#4
0
        public void GeneratePrefabReferences()
        {
                        #if UNITY_2018_3_OR_NEWER
            var prefabType = PrefabUtility.GetPrefabInstanceStatus(this.gameObject);
            if (prefabType != PrefabInstanceStatus.NotAPrefab && prefabType != PrefabInstanceStatus.MissingAsset)
            {
                return;
            }
#else
            var prefabType = PrefabUtility.GetPrefabType(this.gameObject);
            if (prefabType != PrefabType.Prefab && prefabType != PrefabType.MissingPrefabInstance)
            {
                return;
            }
#endif
            // Create a new reference list so that any objects which are no longer dependencies are removed.
            var tempLocalRefs = new ES3RefIdDictionary();

            // Add the GameObject's dependencies to the reference list.
            foreach (var obj in ES3ReferenceMgr.CollectDependencies(this.gameObject))
            {
                var dependency = (UnityEngine.Object)obj;
                if (obj == null || !ES3ReferenceMgr.CanBeSaved(dependency))
                {
                    continue;
                }

                var id = Get(dependency);
                // If we're adding a new reference, do an Undo.RecordObject to ensure it persists.
                if (id == -1)
                {
                    Undo.RecordObject(this, "Update Easy Save 3 Prefab");
                    EditorUtility.SetDirty(this);
                }
                tempLocalRefs.Add(dependency, id == -1 ? GetNewRefID() : id);
            }

            localRefs = tempLocalRefs;
        }
示例#5
0
 public void ChangeId(long oldId, long newId)
 {
     idRef.ChangeKey(oldId, newId);
     // Empty the refId so it has to be refreshed.
     refId = null;
 }