From 26ddab5ff4fb06a67365f8c2f58339f50ae12cb7 Mon Sep 17 00:00:00 2001 From: taoria <445625470@qq.com> Date: Thu, 14 Jul 2022 13:16:41 +0800 Subject: [PATCH] fix:work around on scene object serialization --- Scenes/SampleScene.unity | 96 +++++++++++++++++-- TNode/Attribute/GraphUsageAttribute.cs | 1 + .../{Editor/Serialization => }/DataWrapper.cs | 9 +- .../Serialization => }/DataWrapper.cs.meta | 0 TNode/Models/BlackboardData.cs | 7 +- TNode/Models/GraphData.cs | 3 + TNode/Models/SceneObjectWrapper.cs | 31 ++++++ TNode/Models/SceneObjectWrapper.cs.meta | 3 + .../DefaultGraphBlackboardView.cs | 1 + 9 files changed, 141 insertions(+), 10 deletions(-) rename TNode/{Editor/Serialization => }/DataWrapper.cs (87%) rename TNode/{Editor/Serialization => }/DataWrapper.cs.meta (100%) create mode 100644 TNode/Models/SceneObjectWrapper.cs create mode 100644 TNode/Models/SceneObjectWrapper.cs.meta diff --git a/Scenes/SampleScene.unity b/Scenes/SampleScene.unity index ad4cbd0..7c49f30 100644 --- a/Scenes/SampleScene.unity +++ b/Scenes/SampleScene.unity @@ -199,7 +199,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 - m_AdditionalShaderChannelsFlag: 0 + m_AdditionalShaderChannelsFlag: 25 m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 @@ -625,6 +625,90 @@ Transform: m_Father: {fileID: 507038910} m_RootOrder: -1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1648230696 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1648230698} + - component: {fileID: 1648230697} + m_Layer: 0 + m_Name: Square + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &1648230697 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1648230696} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!4 &1648230698 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1648230696} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1701140682 GameObject: m_ObjectHideFlags: 0 @@ -752,14 +836,14 @@ MonoBehaviour: m_Calls: [] m_text: Button m_isRightToLeft: 0 - m_fontAsset: {fileID: 0} - m_sharedMaterial: {fileID: 0} + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] m_fontColor32: serializedVersion: 2 - rgba: 4294967295 + rgba: 4281479730 m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} m_enableVertexGradient: 0 m_colorMode: 3 @@ -772,7 +856,7 @@ MonoBehaviour: m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 + m_TextStyleHashCode: -1183493901 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 @@ -803,7 +887,7 @@ MonoBehaviour: checkPaddingRequired: 0 m_isRichText: 1 m_parseCtrlCharacters: 1 - m_isOrthographic: 0 + m_isOrthographic: 1 m_isCullingEnabled: 0 m_horizontalMapping: 0 m_verticalMapping: 0 diff --git a/TNode/Attribute/GraphUsageAttribute.cs b/TNode/Attribute/GraphUsageAttribute.cs index fd17135..67f1ff4 100644 --- a/TNode/Attribute/GraphUsageAttribute.cs +++ b/TNode/Attribute/GraphUsageAttribute.cs @@ -13,6 +13,7 @@ namespace TNode.Attribute{ /// [AttributeUsage(AttributeTargets.Class)] [BaseTypeRequired(typeof(IModel))] + [UsedImplicitly] public class GraphUsageAttribute:System.Attribute{ public readonly Type GraphDataType; public string Category; diff --git a/TNode/Editor/Serialization/DataWrapper.cs b/TNode/DataWrapper.cs similarity index 87% rename from TNode/Editor/Serialization/DataWrapper.cs rename to TNode/DataWrapper.cs index 7fed251..9aec6b7 100644 --- a/TNode/Editor/Serialization/DataWrapper.cs +++ b/TNode/DataWrapper.cs @@ -5,10 +5,10 @@ using UnityEngine; namespace TNode.Editor.Serialization{ [Serializable] - public class DataWrapper:ScriptableObject where TWrapper:DataWrapper where TData:IModel,new(){ + public class DataWrapper:ScriptableObject where TWrapper:DataWrapper,new(){ [SerializeReference] public TData data; - private static readonly Dictionary Cache = new (); + protected static readonly Dictionary Cache = new (); public static TWrapper Get(TData data){ if (data.GetType().IsGenericType){ return CreateInstance(); @@ -33,10 +33,13 @@ namespace TNode.Editor.Serialization{ var fieldInfo = data.GetType().GetField(path); return fieldInfo.GetValue(data); } + public virtual TData GetData(){ + return data; + } public static implicit operator TData(DataWrapper wrapper){ if (wrapper == null) return default(TData); - return wrapper.data; + return wrapper.GetData(); } /// diff --git a/TNode/Editor/Serialization/DataWrapper.cs.meta b/TNode/DataWrapper.cs.meta similarity index 100% rename from TNode/Editor/Serialization/DataWrapper.cs.meta rename to TNode/DataWrapper.cs.meta diff --git a/TNode/Models/BlackboardData.cs b/TNode/Models/BlackboardData.cs index 14cff62..ad1a97e 100644 --- a/TNode/Models/BlackboardData.cs +++ b/TNode/Models/BlackboardData.cs @@ -1,8 +1,13 @@ using System; +using System.Collections.Generic; +using Object = UnityEngine.Object; namespace TNode.Models{ + /// + /// Black board data can store scene data + /// [Serializable] + public class BlackboardData:IModel{ - } } \ No newline at end of file diff --git a/TNode/Models/GraphData.cs b/TNode/Models/GraphData.cs index d5c01e4..31fcb39 100644 --- a/TNode/Models/GraphData.cs +++ b/TNode/Models/GraphData.cs @@ -17,6 +17,9 @@ namespace TNode.Models{ [SerializeReference] public BlackboardData blackboardData; + [HideInInspector] + public string sceneReference; + public List NodeLinks{ get{ return nodeLinks ??= new List(); diff --git a/TNode/Models/SceneObjectWrapper.cs b/TNode/Models/SceneObjectWrapper.cs new file mode 100644 index 0000000..cc75204 --- /dev/null +++ b/TNode/Models/SceneObjectWrapper.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using System.Linq; +using TNode.Editor.Serialization; +using UnityEngine; + +namespace TNode.Models{ + + /// + /// Scene Object wrapper use to serialize blackboard data + /// + public class SceneObjectWrapper:DataWrapper{ + public bool loadedFromScene =false; + + public List sceneObjects = new List(); + public void LoadFromScene(){ + + } + public override BlackboardData GetData(){ + if (data == null) return null; + if (!Cache.ContainsKey(this)){ + Cache.Add(data,this); + } + + if (loadedFromScene==false){ + loadedFromScene = true; + } + + return data; + } + } +} \ No newline at end of file diff --git a/TNode/Models/SceneObjectWrapper.cs.meta b/TNode/Models/SceneObjectWrapper.cs.meta new file mode 100644 index 0000000..9c22ed3 --- /dev/null +++ b/TNode/Models/SceneObjectWrapper.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9603719ce2e546968394c0f2a0c83ef3 +timeCreated: 1657774760 \ No newline at end of file diff --git a/TNodeGraphViewImpl/Editor/GraphBlackboard/DefaultGraphBlackboardView.cs b/TNodeGraphViewImpl/Editor/GraphBlackboard/DefaultGraphBlackboardView.cs index 69ffebc..e848d1c 100644 --- a/TNodeGraphViewImpl/Editor/GraphBlackboard/DefaultGraphBlackboardView.cs +++ b/TNodeGraphViewImpl/Editor/GraphBlackboard/DefaultGraphBlackboardView.cs @@ -20,6 +20,7 @@ namespace TNodeGraphViewImpl.Editor.GraphBlackboard{ } protected override void UpdateBlackboard(BlackboardData data){ + if (data == null) return; var serializedObject = new SerializedObject((BlackboardDataWrapper)data); foreach (var field in data.GetType() .GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)){