Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: UITransform and UIText SDK components #204

Merged
merged 64 commits into from
Jan 12, 2024
Merged
Show file tree
Hide file tree
Changes from 60 commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
1e0841e
Create global UIDocument for scenes UI + start implementing UIText sy…
sandrade-dcl Dec 13, 2023
18bd4c2
Merge branch 'main' into feat/sdk7-compatibility-ui-text
sandrade-dcl Jan 1, 2024
0647ca6
Fix conflicts after last merge
sandrade-dcl Jan 1, 2024
17836ee
Fix IntegrationTestsSuite
sandrade-dcl Jan 1, 2024
4406ce0
Move SceneUI folder to DCL/SDKComponents
sandrade-dcl Jan 1, 2024
bd7058a
Handle UIText removal
sandrade-dcl Jan 1, 2024
481cd53
Update SceneUIPlugin.cs
sandrade-dcl Jan 2, 2024
d71232d
Update UITextHandlerSystem.cs
sandrade-dcl Jan 2, 2024
c466629
Setup canvas with the default configuration
sandrade-dcl Jan 2, 2024
3ccdee4
Move ProtoConvertUtils and UiElementUtils under SceneUI folder
sandrade-dcl Jan 2, 2024
78467ff
Implement UITransform
sandrade-dcl Jan 2, 2024
88bddf8
Add release bejavior
sandrade-dcl Jan 3, 2024
f857520
Create a style sheet for the main canvas
sandrade-dcl Jan 3, 2024
341effb
Merge branch 'main' into feat/sdk7-compatibility-ui-text
sandrade-dcl Jan 3, 2024
b94b832
Merge branch 'main' into feat/sdk7-compatibility-ui-text
sandrade-dcl Jan 3, 2024
2fee439
Update UITransformHandlerSystem.cs
sandrade-dcl Jan 3, 2024
2933dee
Fix tests
sandrade-dcl Jan 3, 2024
45d67fe
Move the release logic to separated systems
sandrade-dcl Jan 3, 2024
558523e
Make UITransformInstantiationSystem executes first of all the rest of…
sandrade-dcl Jan 3, 2024
b305b97
Apply parenting to UIText
sandrade-dcl Jan 3, 2024
21aac88
Set a name for each component
sandrade-dcl Jan 4, 2024
f7e5325
UITransform: parenting and sorting
sandrade-dcl Jan 5, 2024
7e141d8
Code refactor
sandrade-dcl Jan 5, 2024
25a85a8
Folders reorganization
sandrade-dcl Jan 5, 2024
a8c0d25
Folders reorganization (II)
sandrade-dcl Jan 5, 2024
7ec42a5
Update SceneUIPlugin.cs
sandrade-dcl Jan 5, 2024
70213bb
Merge branch 'main' into feat/sdk7-compatibility-ui-text
sandrade-dcl Jan 5, 2024
b261390
Fix missing conflicts from last merge
sandrade-dcl Jan 5, 2024
5b0cc98
Add an option to clear PB components on Get
mikhail-dcl Jan 8, 2024
cc43108
Set default values in UiElementUtils.SetupVisualElement function
sandrade-dcl Jan 8, 2024
831848d
Remove unneeded conditional
sandrade-dcl Jan 8, 2024
5d34067
Apply UITransform sibling
sandrade-dcl Jan 8, 2024
41310c4
Merge branch 'main' into feat/sdk7-compatibility-ui-text
sandrade-dcl Jan 9, 2024
10e10d0
Fix missing conflicts from last merge
sandrade-dcl Jan 9, 2024
2cd9290
Outline detection of the current scene
sandrade-dcl Jan 9, 2024
364be7b
Fix tests
sandrade-dcl Jan 9, 2024
e9e0391
Hide scene UI when we're out of the scene
sandrade-dcl Jan 9, 2024
23b470d
Hide scene UI when we're out of the scene (II)
sandrade-dcl Jan 9, 2024
ad24a39
Hide scene UI when we're out of the scene (III)
sandrade-dcl Jan 9, 2024
1271c9f
Merge branch 'main' into feat/sdk7-compatibility-ui-text
sandrade-dcl Jan 9, 2024
58fcebc
UIText test coverage
sandrade-dcl Jan 10, 2024
a1604f1
Reset processed parcel on realm invalidation
mikhail-dcl Jan 10, 2024
4227475
UITransformInstantiation test coverage
sandrade-dcl Jan 10, 2024
0b7bc8d
UITransformUpdate test coverage
sandrade-dcl Jan 10, 2024
2f929bd
Merge branch 'main' into feat/sdk7-compatibility-ui-text
sandrade-dcl Jan 11, 2024
50c59db
Apply feedback: Remove redundant conditional
sandrade-dcl Jan 11, 2024
aa32f69
Apply feedback: Remove unneeded RightOf from UITransformComponent
sandrade-dcl Jan 11, 2024
a45ab58
Apply feedback: Store pool in release ctor
sandrade-dcl Jan 11, 2024
8a1cc98
Apply feedback: Implement missing logic that removes a child from the…
sandrade-dcl Jan 11, 2024
d9d3e99
Apply feedback: Remove leftover code
sandrade-dcl Jan 11, 2024
8d87f3a
Apply feedback: Avoid to execute always CheckUITransformOutOfSceneQuery
sandrade-dcl Jan 11, 2024
c61537d
Apply feedback: Add maxSize to AddComponentPool method
sandrade-dcl Jan 11, 2024
dfa9070
Apply feedback: Set tests as PlayMode
sandrade-dcl Jan 11, 2024
3fff4be
Remove unneeded inspector reference to ScenesUIRootCanvas and ScenesU…
sandrade-dcl Jan 11, 2024
1a15e62
Update UITransformSystemTestBase.cs
sandrade-dcl Jan 11, 2024
d0e4bcb
Merge branch 'main' into feat/sdk7-compatibility-ui-text
sandrade-dcl Jan 11, 2024
a0fec46
Fix conflicts from last merge
sandrade-dcl Jan 11, 2024
d9665a8
Fix code conventions tests
sandrade-dcl Jan 12, 2024
2955e8a
Fix async tests
mikhail-dcl Jan 12, 2024
347608f
Merge remote-tracking branch 'origin/feat/sdk7-compatibility-ui-text'…
mikhail-dcl Jan 12, 2024
6bb77ce
Update StaticSceneLauncher.cs
sandrade-dcl Jan 12, 2024
23e7998
Isolate Scene Canvas inside the corresponding plugin
mikhail-dcl Jan 12, 2024
99b853e
Commit namespace provider settings
mikhail-dcl Jan 12, 2024
5bb4ec6
Merge remote-tracking branch 'origin/feat/sdk7-compatibility-ui-text'…
mikhail-dcl Jan 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions Explorer/Assets/AddressableAssetsData/AssetGroups/UI.asset
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,16 @@ MonoBehaviour:
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: e0f5a4ab5d8f74640ae94adb6824bd45
m_Address: ScenesUIRootCanvas
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 295cf8ad8d171d849863eccaf581c9e7
m_Address: ScenesUIStyleSheet
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
m_ReadOnly: 0
m_Settings: {fileID: 11400000, guid: fc8a9d2b539788c47a5b305639fa8b34, type: 2}
m_SchemaSet:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public class DebugLogReportHandler : ReportHandlerBase
// Scene Loading blueish
{ ReportCategory.SCENE_LOADING, ColorUtility.ToHtmlStringRGB(new Color(0.30f, 0.50f, 0.90f)) },
{ ReportCategory.SCENE_FACTORY, ColorUtility.ToHtmlStringRGB(new Color(0.15f, 0.35f, 0.75f)) },
{ ReportCategory.SCENE_UI, ColorUtility.ToHtmlStringRGB(new Color(0.10f, 0.30f, 0.45f)) },

// JavaScript
{ ReportCategory.JAVASCRIPT, ColorUtility.ToHtmlStringRGB(new Color(0.90f, 0.30f, 0.35f)) },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@ public static class ReportCategory
/// </summary>
public const string SCENE_LOADING = nameof(SCENE_LOADING);

/// <summary>
/// Messages related to the scene UI
/// </summary>
public const string SCENE_UI = nameof(SCENE_UI);

/// <summary>
/// Errors reported from JavaScript
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ public interface IComponentPoolsRegistry : IDisposable

public static class ComponentPoolsRegistryExtensions
{
public static void AddComponentPool<T>(this IComponentPoolsRegistry componentPoolsRegistry, Action<T> onGet = null, Action<T> onRelease = null) where T: class, new()
public static void AddComponentPool<T>(this IComponentPoolsRegistry componentPoolsRegistry, Action<T> onGet = null, Action<T> onRelease = null, int maxSize = 10000) where T: class, new()
{
componentPoolsRegistry.AddComponentPool(new ComponentPool<T>(onGet, onRelease));
componentPoolsRegistry.AddComponentPool(new ComponentPool<T>(onGet, onRelease, maxSize: maxSize));
}
}
}
1 change: 1 addition & 0 deletions Explorer/Assets/DCL/PluginSystem/DCL.Plugins.asmdef
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
"GUID:6830e2f56251b492e9934f1fafbc8c7d",
"GUID:5ab29fa8ae5769b49ab29e390caca7a4",
"GUID:e56a0d6a94c144c784012e63b6043100",
"GUID:7f6c11dd1400cef4f838168f18ce244a",
"GUID:91cf8206af184dac8e30eb46747e9939",
"GUID:28964ef7dc9441b6b8671b61a8106690",
"GUID:571dc9f8bded0034f98595106462e3d0",
Expand Down
56 changes: 56 additions & 0 deletions Explorer/Assets/DCL/PluginSystem/World/SceneUIPlugin.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
using Arch.SystemGroups;
using DCL.Optimization.Pools;
using DCL.PluginSystem.World.Dependencies;
using DCL.SDKComponents.SceneUI.Components;
using DCL.SDKComponents.SceneUI.Utils;
using ECS.ComponentsPooling.Systems;
using ECS.LifeCycle;
using System.Collections.Generic;
using UnityEngine.UIElements;
using UITextInstantiationSystem = DCL.SDKComponents.SceneUI.Systems.UIText.UITextInstantiationSystem;
using UITextReleaseSystem = DCL.SDKComponents.SceneUI.Systems.UIText.UITextReleaseSystem;
using UITransformInstantiationSystem = DCL.SDKComponents.SceneUI.Systems.UITransform.UITransformInstantiationSystem;
using UITransformParentingSystem = DCL.SDKComponents.SceneUI.Systems.UITransform.UITransformParentingSystem;
using UITransformReleaseSystem = DCL.SDKComponents.SceneUI.Systems.UITransform.UITransformReleaseSystem;
using UITransformSortingSystem = DCL.SDKComponents.SceneUI.Systems.UITransform.UITransformSortingSystem;
using UITransformUpdateSystem = DCL.SDKComponents.SceneUI.Systems.UITransform.UITransformUpdateSystem;

namespace DCL.PluginSystem.World
{
public class SceneUIPlugin : IDCLWorldPluginWithoutSettings
{
private readonly UIDocument canvas;
private readonly IComponentPoolsRegistry componentPoolsRegistry;

public SceneUIPlugin(
UIDocument canvas,
StyleSheet canvasStyleSheet,
ECSWorldSingletonSharedDependencies singletonSharedDependencies)
{
this.canvas = canvas;
this.canvas.rootVisualElement.styleSheets.Add(canvasStyleSheet);
this.canvas.rootVisualElement.AddToClassList("sceneUIMainCanvas");
this.canvas.rootVisualElement.pickingMode = PickingMode.Ignore;

componentPoolsRegistry = singletonSharedDependencies.ComponentPoolsRegistry;
componentPoolsRegistry.AddComponentPool<VisualElement>(onRelease: UiElementUtils.ReleaseUIElement, maxSize: 200);
componentPoolsRegistry.AddComponentPool<Label>(onRelease: UiElementUtils.ReleaseUIElement, maxSize: 100);
}

public void InjectToWorld(ref ArchSystemsWorldBuilder<Arch.Core.World> builder, in ECSWorldInstanceSharedDependencies sharedDependencies, in PersistentEntities persistentEntities, List<IFinalizeWorldSystem> finalizeWorldSystems)
{
UITransformInstantiationSystem.InjectToWorld(ref builder, canvas, componentPoolsRegistry);
UITransformParentingSystem.InjectToWorld(ref builder, sharedDependencies.EntitiesMap, persistentEntities.SceneRoot);
UITransformSortingSystem.InjectToWorld(ref builder, sharedDependencies.EntitiesMap, persistentEntities.SceneRoot);
UITransformUpdateSystem.InjectToWorld(ref builder, canvas, sharedDependencies.SceneStateProvider);
UITransformReleaseSystem.InjectToWorld(ref builder, componentPoolsRegistry);
UITextInstantiationSystem.InjectToWorld(ref builder, componentPoolsRegistry);
UITextReleaseSystem.InjectToWorld(ref builder, componentPoolsRegistry);

finalizeWorldSystems.Add(ReleasePoolableComponentSystem<VisualElement, UITransformComponent>.InjectToWorld(ref builder, componentPoolsRegistry));
finalizeWorldSystems.Add(ReleasePoolableComponentSystem<Label, UITextComponent>.InjectToWorld(ref builder, componentPoolsRegistry));
sandrade-dcl marked this conversation as resolved.
Show resolved Hide resolved
}

public void InjectToEmptySceneWorld(ref ArchSystemsWorldBuilder<Arch.Core.World> builder, in EmptyScenesWorldSharedDependencies dependencies) { }
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,16 @@
using System.Threading;
using UnityEditor;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.UIElements;
using Object = UnityEngine.Object;

namespace DCL.SDKComponents.AudioSources.Tests.PlayMode
{
public class SDKAudioSourcesAutomatedTests
{
private const string SCENES_UI_ROOT_CANVAS = "ScenesUIRootCanvas";
private const string SCENES_UI_STYLE_SHEET = "ScenesUIStyleSheet";
private const string TEST_SCENE = "Dance-floor";
private const int TARGET_FPS = 60;

Expand Down Expand Up @@ -106,7 +110,13 @@ private async UniTask InitializationFlowAsync(CancellationToken ct)
CancellationToken ct)
{
// First load the common global plugin
(StaticContainer staticContainer, bool isLoaded) = await StaticContainer.CreateAsync(globalSettingsContainer, web3IdentityCache, ethereumApi, ct);
(StaticContainer staticContainer, bool isLoaded) = await StaticContainer.CreateAsync(
globalSettingsContainer,
Object.Instantiate(await Addressables.LoadAssetAsync<GameObject>(SCENES_UI_ROOT_CANVAS)).GetComponent<UIDocument>(),
await Addressables.LoadAssetAsync<StyleSheet>(SCENES_UI_STYLE_SHEET),
web3IdentityCache,
ethereumApi,
ct);

if (!isLoaded)
GameReports.PrintIsDead();
Expand Down
3 changes: 3 additions & 0 deletions Explorer/Assets/DCL/SDKComponents/SceneUI.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions Explorer/Assets/DCL/SDKComponents/SceneUI/Components.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using DCL.Optimization.Pools;
using System;
using UnityEngine.UIElements;

namespace DCL.SDKComponents.SceneUI.Components
{
public struct UITextComponent: IPoolableComponentProvider<Label>
{
public Label Label;

Label IPoolableComponentProvider<Label>.PoolableComponent => Label;
Type IPoolableComponentProvider<Label>.PoolableComponentType => typeof(Label);

public void Dispose() { }
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using Arch.Core;
using DCL.Optimization.Pools;
using System;
using System.Collections.Generic;
using UnityEngine.Pool;
using UnityEngine.UIElements;

namespace DCL.SDKComponents.SceneUI.Components
{
public struct UITransformComponent : IPoolableComponentProvider<VisualElement>
{
public VisualElement Transform;
public EntityReference Parent;
public HashSet<EntityReference> Children;
public bool IsHidden;

VisualElement IPoolableComponentProvider<VisualElement>.PoolableComponent => Transform;
Type IPoolableComponentProvider<VisualElement>.PoolableComponentType => typeof(VisualElement);

public void Dispose()
{
HashSetPool<EntityReference>.Release(Children);
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions Explorer/Assets/DCL/SDKComponents/SceneUI/Defaults.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using DCL.ECSComponents;
using DCL.SDKComponents.SceneUI.Utils;
using ECS.Unity.ColorComponent;
using UnityEngine;
using Font = DCL.ECSComponents.Font;

namespace DCL.SDKComponents.SceneUI.Defaults
{
public static class PBUiTextDefaults
{
public static Color GetColor(this PBUiText self) =>
self.Color?.ToUnityColor() ?? ColorDefaults.COLOR_WHITE;

public static TextAnchor GetTextAlign(this PBUiText self) =>
(self.HasTextAlign ? self.TextAlign : TextAlignMode.TamMiddleCenter).ToUnityTextAlign();

public static Font GetFont(this PBUiText self) =>
self.HasFont ? self.Font : Font.FSansSerif;

public static float GetFontSize(this PBUiText self) =>
self.HasFontSize ? self.FontSize : 10;
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using DCL.ECSComponents;

namespace DCL.SDKComponents.SceneUI.Defaults
{
public static class PBUiTransform_Defaults
{
public static float GetFlexShrink(this PBUiTransform self) =>
self.HasFlexShrink ? self.FlexShrink : 1;

public static YGAlign GetAlignItems(this PBUiTransform self) =>
self.HasAlignItems ? self.AlignItems : YGAlign.YgaStretch;

public static YGAlign GetAlignContent(this PBUiTransform self) =>
self.HasAlignContent ? self.AlignContent : YGAlign.YgaStretch;

public static YGWrap GetFlexWrap(this PBUiTransform self) =>
self.HasFlexWrap ? self.FlexWrap : YGWrap.YgwNoWrap;
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions Explorer/Assets/DCL/SDKComponents/SceneUI/Groups.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using Arch.SystemGroups;
using Arch.SystemGroups.Throttling;
using DCL.SDKComponents.SceneUI.Systems;
using ECS.Groups;
using UITransformInstantiationSystem = DCL.SDKComponents.SceneUI.Systems.UITransform.UITransformInstantiationSystem;

namespace DCL.SDKComponents.SceneUI.Groups
{
/// <summary>
/// Denotes the group that instantiates specific components right after the entity transform is handled
/// </summary>
[UpdateInGroup(typeof(SyncedSimulationSystemGroup))]
[UpdateAfter(typeof(UITransformInstantiationSystem))]
[ThrottlingEnabled]
public partial class SceneUIComponentInstantiationGroup { }
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 32 additions & 0 deletions Explorer/Assets/DCL/SDKComponents/SceneUI/SceneUI.asmdef
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"name": "SceneUI",
"rootNamespace": "",
"references": [
"GUID:1b8e1e1bd01505f478f0369c04a4fb2f",
"GUID:4794e238ed0f65142a4aea5848b513e5",
"GUID:275e22790c04e9b47a5085d7b0c4432a",
"GUID:3c7b57a14671040bd8c549056adc04f5",
"GUID:0f4c0f120707fb74497f5d581b9858f8",
"GUID:fa7b3fdbb04d67549916da7bd2af58ab",
"GUID:08b2edf8f14cdd3408988fd7746b749c",
"GUID:d414ef88f3b15f746a4b97636b50dfb4",
"GUID:f51ebe6a0ceec4240a699833d6309b23",
"GUID:fd2b275602de4d638e01adafe118d5ea",
"GUID:3640f3c0b42946b0b8794a1ed8e06ca5",
"GUID:6055be8ebefd69e48b49212b09b47b2f",
"GUID:56e8195b069a4dca9c4c4f313c65f526",
"GUID:393a5d2fbaa249d09c260018aaeb4fc0",
"GUID:166b65e6dfc848bb9fb075f53c293a38",
"GUID:101b8b6ebaf64668909b49c4b7a1420d",
"GUID:286980af24684da6acc1caa413039811"
],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &8765448689815683113
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4780495006830554941}
- component: {fileID: 3889322179606995116}
m_Layer: 5
m_Name: ScenesUIRootCanvas
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4780495006830554941
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8765448689815683113}
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: 8
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3889322179606995116
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8765448689815683113}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_PanelSettings: {fileID: 11400000, guid: 9be11967a62ac1e43a24aecf7ff62934, type: 2}
m_ParentUI: {fileID: 0}
sourceAsset: {fileID: 0}
m_SortingOrder: 200
Loading
Loading