首次提交
This commit is contained in:
95
Assets/Plugins/vHierarchy/VHierarchyDataComponent.cs
Normal file
95
Assets/Plugins/vHierarchy/VHierarchyDataComponent.cs
Normal file
@@ -0,0 +1,95 @@
|
||||
#if UNITY_EDITOR
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using UnityEditor.ShortcutManagement;
|
||||
using System.Reflection;
|
||||
using System.Linq;
|
||||
using UnityEngine.UIElements;
|
||||
using UnityEngine.SceneManagement;
|
||||
using UnityEditor.SceneManagement;
|
||||
using UnityEditor.Experimental.SceneManagement;
|
||||
using Type = System.Type;
|
||||
using static VHierarchy.VHierarchyData;
|
||||
using static VHierarchy.Libs.VUtils;
|
||||
using static VHierarchy.Libs.VGUI;
|
||||
|
||||
|
||||
|
||||
namespace VHierarchy
|
||||
{
|
||||
[ExecuteInEditMode]
|
||||
public abstract class VHierarchyDataComponent : MonoBehaviour, ISerializationCallbackReceiver
|
||||
{
|
||||
public void Awake()
|
||||
{
|
||||
void register()
|
||||
{
|
||||
VHierarchy.dataComponents_byScene[gameObject.scene] = this;
|
||||
}
|
||||
void handleSceneDuplication()
|
||||
{
|
||||
if (sceneData == null) return;
|
||||
if (!sceneData.goDatas_byGlobalId.Any()) return;
|
||||
|
||||
|
||||
var curSceneGuid = gameObject.scene.path.ToGuid();
|
||||
var dataSceneGuid = sceneData.goDatas_byGlobalId.Keys.First().guid;
|
||||
|
||||
if (curSceneGuid == dataSceneGuid) return;
|
||||
|
||||
|
||||
var newDic = new SerializableDictionary<GlobalID, GameObjectData>();
|
||||
|
||||
foreach (var kvp in sceneData.goDatas_byGlobalId)
|
||||
newDic[new GlobalID(kvp.Key.ToString().Replace(dataSceneGuid, curSceneGuid))] = kvp.Value;
|
||||
|
||||
|
||||
sceneData.goDatas_byGlobalId = newDic;
|
||||
|
||||
|
||||
EditorSceneManager.MarkSceneDirty(gameObject.scene);
|
||||
EditorSceneManager.SaveScene(gameObject.scene);
|
||||
|
||||
}
|
||||
|
||||
register();
|
||||
handleSceneDuplication();
|
||||
|
||||
}
|
||||
|
||||
public SceneData sceneData;
|
||||
|
||||
|
||||
public void OnBeforeSerialize() => VHierarchy.firstDataCacheLayer.Clear();
|
||||
public void OnAfterDeserialize() => VHierarchy.firstDataCacheLayer.Clear();
|
||||
|
||||
|
||||
|
||||
[CustomEditor(typeof(VHierarchyDataComponent), true)]
|
||||
class Editor : UnityEditor.Editor
|
||||
{
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
var style = EditorStyles.label;
|
||||
style.wordWrap = true;
|
||||
|
||||
|
||||
SetGUIEnabled(false);
|
||||
BeginIndent(0);
|
||||
|
||||
Space(4);
|
||||
EditorGUILayout.LabelField("This component stores vHierarchy icons and colors that are assigned to objects in this scene", style);
|
||||
|
||||
Space(2);
|
||||
|
||||
EndIndent(10);
|
||||
ResetGUIEnabled();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user