From 0af41232fba39ee61b2aecab6ce318a006bae8c0 Mon Sep 17 00:00:00 2001 From: Finn Sinclair Date: Wed, 4 Jan 2023 20:02:43 -0800 Subject: [PATCH 01/18] Initial checkins 3 a --- .../MRTKDevTemplate/Packages/manifest.json | 1 + .../Packages/packages-lock.json | 11 ++++++++ .../MRTK.Theming.asmdef | 19 ++++++++++++++ .../MRTK.Theming.asmdef.meta | 7 ++++++ org.mixedrealitytoolkit.theming/package.json | 25 +++++++++++++++++++ .../package.json.meta | 7 ++++++ 6 files changed, 70 insertions(+) create mode 100644 org.mixedrealitytoolkit.theming/MRTK.Theming.asmdef create mode 100644 org.mixedrealitytoolkit.theming/MRTK.Theming.asmdef.meta create mode 100644 org.mixedrealitytoolkit.theming/package.json create mode 100644 org.mixedrealitytoolkit.theming/package.json.meta diff --git a/UnityProjects/MRTKDevTemplate/Packages/manifest.json b/UnityProjects/MRTKDevTemplate/Packages/manifest.json index 23830891f..16cea28ea 100644 --- a/UnityProjects/MRTKDevTemplate/Packages/manifest.json +++ b/UnityProjects/MRTKDevTemplate/Packages/manifest.json @@ -33,6 +33,7 @@ "org.mixedrealitytoolkit.input": "file:../../../org.mixedrealitytoolkit.input", "org.mixedrealitytoolkit.spatialmanipulation": "file:../../../org.mixedrealitytoolkit.spatialmanipulation", "org.mixedrealitytoolkit.standardassets": "file:../../../org.mixedrealitytoolkit.standardassets", + "org.mixedrealitytoolkit.theming": "file:../../../org.mixedrealitytoolkit.theming", "org.mixedrealitytoolkit.tools": "file:../../../org.mixedrealitytoolkit.tools", "org.mixedrealitytoolkit.uxcomponents": "file:../../../org.mixedrealitytoolkit.uxcomponents", "org.mixedrealitytoolkit.uxcomponents.noncanvas": "file:../../../org.mixedrealitytoolkit.uxcomponents.noncanvas", diff --git a/UnityProjects/MRTKDevTemplate/Packages/packages-lock.json b/UnityProjects/MRTKDevTemplate/Packages/packages-lock.json index d652f6d50..ecd6f6950 100644 --- a/UnityProjects/MRTKDevTemplate/Packages/packages-lock.json +++ b/UnityProjects/MRTKDevTemplate/Packages/packages-lock.json @@ -434,6 +434,17 @@ "com.microsoft.mrtk.graphicstools.unity": "0.8.0" } }, + "org.mixedrealitytoolkit.theming": { + "version": "file:../../../org.mixedrealitytoolkit.theming", + "depth": 0, + "source": "local", + "dependencies": { + "com.microsoft.mrtk.graphicstools.unity": "0.8.0", + "org.mixedrealitytoolkit.core": "4.0.0", + "org.mixedrealitytoolkit.uxcore": "4.0.0", + "com.unity.textmeshpro": "3.0.6" + } + }, "org.mixedrealitytoolkit.tools": { "version": "file:../../../org.mixedrealitytoolkit.tools", "depth": 0, diff --git a/org.mixedrealitytoolkit.theming/MRTK.Theming.asmdef b/org.mixedrealitytoolkit.theming/MRTK.Theming.asmdef new file mode 100644 index 000000000..0433b9dfa --- /dev/null +++ b/org.mixedrealitytoolkit.theming/MRTK.Theming.asmdef @@ -0,0 +1,19 @@ +{ + "name": "MixedReality.Toolkit.Theming", + "rootNamespace": "MixedReality.Toolkit.Theming", + "references": [ + "GUID:22213891bfe50254781c448a2277a9a5", + "GUID:56255bd5d851a6243b63cb370cfc40b1", + "GUID:9a9367d437335a947a847011f5575869", + "GUID:6055be8ebefd69e48b49212b09b47b2f" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/org.mixedrealitytoolkit.theming/MRTK.Theming.asmdef.meta b/org.mixedrealitytoolkit.theming/MRTK.Theming.asmdef.meta new file mode 100644 index 000000000..7f0d40bd4 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/MRTK.Theming.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2238d58cada9b6746a548c6bff32c381 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/package.json b/org.mixedrealitytoolkit.theming/package.json new file mode 100644 index 000000000..825e925bc --- /dev/null +++ b/org.mixedrealitytoolkit.theming/package.json @@ -0,0 +1,25 @@ +{ + "name": "org.mixedrealitytoolkit.theming", + "version": "1.0.0-development.pre.1", + "description": "Core theming scripts for building MR UI components. Intended to be consumed when building UX libraries. For pre-existing library of components, see the UX Components package.", + "displayName": "MRTK UX Theming", + "msftFeatureCategory": "MRTK3", + "author": "Mixed Reality Toolkit Contributors", + "license": "BSD 3-Clause", + "repository": { + "type": "git", + "url": "https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity.git" + }, + "bugs": { + "url": "https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/issues" + }, + "unity": "6000.0", + "unityRelease": "66f2", + "documentationUrl": "https://www.mixedrealitytoolkit.org", + "dependencies": { + "com.microsoft.mrtk.graphicstools.unity": "0.8.0", + "org.mixedrealitytoolkit.core": "4.0.0", + "org.mixedrealitytoolkit.uxcore": "4.0.0", + "com.unity.textmeshpro": "3.0.6" + } +} \ No newline at end of file diff --git a/org.mixedrealitytoolkit.theming/package.json.meta b/org.mixedrealitytoolkit.theming/package.json.meta new file mode 100644 index 000000000..4e1a918b6 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e0eea43c3b742dc4291ba8492ff3435a +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From 6d1e2cc535e6c1e1dedd7655d4abfcf02d389d54 Mon Sep 17 00:00:00 2001 From: Kurtis Date: Mon, 1 Dec 2025 14:42:18 -0800 Subject: [PATCH 02/18] org.mixedrealitytoolkit.core updates --- org.mixedrealitytoolkit.core/CHANGELOG.md | 6 +++++- .../Editor/PropertyDrawers/DrawIfPropertyDrawer.cs | 11 ++--------- .../Utilities/Attributes/ExtendsAttribute.cs | 5 +++-- .../Utilities/Attributes/SystemTypeAttribute.cs | 10 ++++++++-- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/org.mixedrealitytoolkit.core/CHANGELOG.md b/org.mixedrealitytoolkit.core/CHANGELOG.md index 67dbd17d1..95c1911e6 100644 --- a/org.mixedrealitytoolkit.core/CHANGELOG.md +++ b/org.mixedrealitytoolkit.core/CHANGELOG.md @@ -4,6 +4,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## Unreleased +### Added + +* Added `AllowGenericTypeDefinition` to `SystemType` to allow for generics. [PR #1119](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1119) + ### Changed * Updated the minimum editor version to 6000.0.66f2 [PR #1112](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1112) @@ -13,7 +17,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). * Fixed "The type MixedReality.Toolkit.Core MixedReality.Toolkit.Experimental.BubbleChildHoverEvents/TrickleChildHoverEvents/BubbleChildSelectEvents/TrickleChildSelectEvents is being serialized by `[SerializeReference]`, but is missing the `[Serializable]` attribute." on Unity 6.3. [PR #1107](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1107) -## Deprecated +### Deprecated * Deprecated `AdjustTrackingOrigin` on `CameraSettings`. This functionality has been deprecated by the XR Origin component. This property has never had an effect in MRTK3 and will be removed in a future release. [PR #1110](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1110) diff --git a/org.mixedrealitytoolkit.core/Editor/PropertyDrawers/DrawIfPropertyDrawer.cs b/org.mixedrealitytoolkit.core/Editor/PropertyDrawers/DrawIfPropertyDrawer.cs index 2649c0b09..b6032a84e 100644 --- a/org.mixedrealitytoolkit.core/Editor/PropertyDrawers/DrawIfPropertyDrawer.cs +++ b/org.mixedrealitytoolkit.core/Editor/PropertyDrawers/DrawIfPropertyDrawer.cs @@ -30,12 +30,7 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten /// public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { - if (!ShouldShow(property)) - { - return 0f; - } - - return base.GetPropertyHeight(property, label); + return ShouldShow(property) ? base.GetPropertyHeight(property, label) : 0f; } private bool ShouldShow(SerializedProperty property) @@ -43,9 +38,7 @@ private bool ShouldShow(SerializedProperty property) DrawIfAttribute drawIf = attribute as DrawIfAttribute; if (drawIf == null) { return true; } - string path = drawIf.ComparedPropertyName; - - SerializedProperty propertyToCheck = property.serializedObject.FindProperty(path); + SerializedProperty propertyToCheck = property.serializedObject.FindProperty(drawIf.ComparedPropertyName); if (propertyToCheck == null) { Debug.LogError($"DrawIfAttribute couldn't find the SerializedProperty to compare against! (property name: {drawIf.ComparedPropertyName})"); diff --git a/org.mixedrealitytoolkit.core/Utilities/Attributes/ExtendsAttribute.cs b/org.mixedrealitytoolkit.core/Utilities/Attributes/ExtendsAttribute.cs index 619c65376..2a9149b06 100644 --- a/org.mixedrealitytoolkit.core/Utilities/Attributes/ExtendsAttribute.cs +++ b/org.mixedrealitytoolkit.core/Utilities/Attributes/ExtendsAttribute.cs @@ -30,8 +30,9 @@ public ExtendsAttribute(Type baseType, TypeGrouping grouping) : base(baseType, g public override bool IsConstraintSatisfied(Type type) { return base.IsConstraintSatisfied(type) && - BaseType.IsAssignableFrom(type) && + (BaseType.IsAssignableFrom(type) || + (AllowGenericTypeDefinition && type.BaseType != null && type.BaseType.IsGenericType && BaseType.Equals(type.BaseType.GetGenericTypeDefinition()))) && type != BaseType; } } -} \ No newline at end of file +} diff --git a/org.mixedrealitytoolkit.core/Utilities/Attributes/SystemTypeAttribute.cs b/org.mixedrealitytoolkit.core/Utilities/Attributes/SystemTypeAttribute.cs index 01290b2f0..1249b253d 100644 --- a/org.mixedrealitytoolkit.core/Utilities/Attributes/SystemTypeAttribute.cs +++ b/org.mixedrealitytoolkit.core/Utilities/Attributes/SystemTypeAttribute.cs @@ -23,6 +23,12 @@ public abstract class SystemTypeAttribute : PropertyAttribute /// public bool AllowAbstract { get; set; } = false; + /// + /// Gets or sets whether generic classes can be selected from drop-down. + /// Defaults to a value of unless explicitly specified. + /// + public bool AllowGenericTypeDefinition { get; set; } = false; + /// /// Initializes a new instance of the class. /// @@ -45,7 +51,7 @@ protected SystemTypeAttribute(Type type, TypeGrouping grouping = TypeGrouping.By /// public virtual bool IsConstraintSatisfied(Type type) { - return AllowAbstract || !type.IsAbstract; + return (AllowAbstract || !type.IsAbstract) && (AllowGenericTypeDefinition || !type.IsGenericTypeDefinition); } } -} \ No newline at end of file +} From 020aeaa9dfc6a7f625b99664aed771608b3505f6 Mon Sep 17 00:00:00 2001 From: Kurtis Date: Tue, 19 May 2026 16:47:04 -0700 Subject: [PATCH 03/18] org.mixedrealitytoolkit.uxcore updates --- org.mixedrealitytoolkit.uxcore/CHANGELOG.md | 2 + .../FontIconSet/FontIconSetInspector.cs | 11 +- .../FontIcons/FontIconSelector.cs | 18 ++ .../FontIcons/FontIconSetDefinition.cs | 23 ++ .../FontIcons/MRTKFontIconSetDefinition.asset | 273 +++++++++--------- .../StateVisualizer/Effects/TintEffect.cs | 56 +++- .../StateVisualizer/StateVisualizer.cs | 80 ++++- 7 files changed, 319 insertions(+), 144 deletions(-) diff --git a/org.mixedrealitytoolkit.uxcore/CHANGELOG.md b/org.mixedrealitytoolkit.uxcore/CHANGELOG.md index 4917eb2c5..3b6e09408 100644 --- a/org.mixedrealitytoolkit.uxcore/CHANGELOG.md +++ b/org.mixedrealitytoolkit.uxcore/CHANGELOG.md @@ -7,10 +7,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ### Added * Added the ability to map different icon sets together to have matching names (prerequisite for theming work). [PR #1077](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1077) +* Add "Sort and Deduplicate" option to `FontIconSetDefinition`. [PR #1119](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1119) ### Changed * Updated the minimum editor version to 6000.0.66f2 [PR #1112](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1112) +* Updated `FontIconSelector`, `StateVisualizer`, and `TintEffect` to be themeable. [PR #1119](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1119) ### Fixed diff --git a/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSetInspector.cs b/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSetInspector.cs index b4e077840..42bb97875 100644 --- a/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSetInspector.cs +++ b/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSetInspector.cs @@ -439,7 +439,7 @@ private bool CheckIfHoloLensIconFontExists() /// public static void EditorDrawTMPGlyph(Rect position, uint unicode, TMP_FontAsset fontAsset, bool selected = false, Material fontRenderMaterial = null) { - if (fontAsset.characterLookupTable.TryGetValue(unicode, out TMP_Character character)) + if (fontAsset != null && fontAsset.characterLookupTable.TryGetValue(unicode, out TMP_Character character)) { EditorDrawTMPGlyph(position, fontAsset, character, selected, fontRenderMaterial); } @@ -448,7 +448,7 @@ public static void EditorDrawTMPGlyph(Rect position, uint unicode, TMP_FontAsset /// /// Draws a Text Mesh Pro glyph in the supplied . /// - public static void EditorDrawTMPGlyph(Rect glyphRect, TMP_FontAsset fontAsset, TMP_Character character, bool selected = false, Material fontRenderMaterial = null) + private static void EditorDrawTMPGlyph(Rect glyphRect, TMP_FontAsset fontAsset, TMP_Character character, bool selected = false, Material fontRenderMaterial = null) { if (Event.current.type == EventType.Repaint) { @@ -503,9 +503,12 @@ public static void EditorDrawTMPGlyph(Rect glyphRect, TMP_FontAsset fontAsset, T } } } - catch (Exception) + catch (Exception e) { - EditorGUILayout.LabelField("Couldn't draw character icon. UnicodeValue may not be available in the font asset."); + // Calling EditorGUILayout only during Repaint can cause + // "Getting control N's position in a group with only N controls", + // so we instead call GUI.Label to draw directly to the editor + GUI.Label(glyphRect, new GUIContent("!", $"Couldn't draw icon: {e.Message}")); } } } diff --git a/org.mixedrealitytoolkit.uxcore/FontIcons/FontIconSelector.cs b/org.mixedrealitytoolkit.uxcore/FontIcons/FontIconSelector.cs index 1b1c11d82..232fec77e 100644 --- a/org.mixedrealitytoolkit.uxcore/FontIcons/FontIconSelector.cs +++ b/org.mixedrealitytoolkit.uxcore/FontIcons/FontIconSelector.cs @@ -88,6 +88,24 @@ private void OnValidate() SetIcon(currentIconName); } + /// + /// Updates the current and optionally refreshes the icon. + /// + /// + /// If you plan on manually setting after calling this method, it's recommended not to refresh the icon here. + /// + /// The new font icon set to use for this selector. + /// Whether to update the icon using the currently-set name using the new font icon set. + public void SetFontIconSet(FontIconSet fontIconSet, bool refreshIcon = false) + { + fontIcons = fontIconSet; + + if (refreshIcon) + { + SetIcon(currentIconName); + } + } + /// /// Looks up the Unicode value for the specified icon name and applies it to the text component. /// diff --git a/org.mixedrealitytoolkit.uxcore/FontIcons/FontIconSetDefinition.cs b/org.mixedrealitytoolkit.uxcore/FontIcons/FontIconSetDefinition.cs index 8688d2f8a..da535c498 100644 --- a/org.mixedrealitytoolkit.uxcore/FontIcons/FontIconSetDefinition.cs +++ b/org.mixedrealitytoolkit.uxcore/FontIcons/FontIconSetDefinition.cs @@ -16,5 +16,28 @@ public class FontIconSetDefinition : ScriptableObject /// The list of icon names defined by this asset. /// public IReadOnlyList IconNames => iconNames; + +#if UNITY_EDITOR + /// + /// Sorts the icon names and removes duplicates for cleaner serialization. + /// + [ContextMenu("Sort and Deduplicate")] + public void SortAndDeduplicate() + { + if (iconNames == null || iconNames.Length == 0) + { + return; + } + + UnityEditor.Undo.RecordObject(this, "Sort and Deduplicate Icon Names"); + + var uniqueSorted = new List(new HashSet(iconNames)); + uniqueSorted.Sort(); + + iconNames = uniqueSorted.ToArray(); + + UnityEditor.EditorUtility.SetDirty(this); + } +#endif } } diff --git a/org.mixedrealitytoolkit.uxcore/FontIcons/MRTKFontIconSetDefinition.asset b/org.mixedrealitytoolkit.uxcore/FontIcons/MRTKFontIconSetDefinition.asset index 4ef93033e..aee01c636 100644 --- a/org.mixedrealitytoolkit.uxcore/FontIcons/MRTKFontIconSetDefinition.asset +++ b/org.mixedrealitytoolkit.uxcore/FontIcons/MRTKFontIconSetDefinition.asset @@ -13,163 +13,162 @@ MonoBehaviour: m_Name: MRTKFontIconSetDefinition m_EditorClassIdentifier: iconNames: - - Wifi - - Bluetooth - - Brightness - - Airplane - - Settings - - Group - - Pin - - Bookmark - - Stop Circle - - Add Favorite - - Favorite - - Send - - Search - - Save - - Record Circle - - Question Mark - - Block - - Print - - Power Button - - Play Circle - - Play - - Unpin - - Devices - - Phone - - Person - - Home - - Zoom - - Calendar - - Camera - - Paste - - Phone + - Account Tree - Add - - Mail - - Mute - - Mic Off - - Copy - - Visibility On - - Visibility Off - - Link - - Attach - - Lightbulb - - Movie - - Thumb Up - - Thumb Down - - Thumb Down - - Videocam - - Location On - - Location Off - - Mic - - Undo + - Add Circle + - Add Favorite + - Add Group + - Add Location + - Add Note + - Add Tab + - Airplane + - Alarm + - Alarm Off - Apps - - Tag + - Arrow Down - Arrow Left - Arrow Right - Arrow Up - - Arrow Down - - Refresh - - Menu - - More Vertical - - More Horizontal - - Delete + - Attach + - Bar Chart + - Block + - Bluetooth + - Book + - Bookmark + - Brightness + - Cached + - Calendar + - Call + - Call End + - Camera + - Cancel + - Cast + - Check + - Chevron Down - Chevron Left - Chevron Right - Chevron Up - - Chevron Down - - Lock - - Unlock - - Repeat - - Cast + - Circle - Clipboard - - Erase - - History - - Notifications - - Notifications Off - - List - - Call - - Call End - - Check - - Edit - - Folder - - Alarm Off - - Warning - - Info - - Error - - Keyboard - - Cancel - - Dialpad - - Photo - - Save As - Close + - Cloud + - Color Palette + - Computer + - Copy - Cut - - Move - - Sticky Note - - Add Note - - Pan - - Add Group - - Book - - Settings Sliders - - Hierarchy - - Add Location - - Grid View - - Show Chart - - Cached - - Add Circle - - Music Info - - Remove Location - - Language + - Delete + - Devices + - Dialpad + - Display + - Doc + - Draft + - Edit + - Edit Doc + - Erase + - Error + - Exclamation Point + - Exit + - Favorite + - Flag Outline + - Folder - Globe + - Graph 1 + - Grid View + - Group + - Hand Left + - Hand Right - Headphones - Heart Outline - - Exclamation Point - - Pushpin - - Pen Tip - - Flag Outline + - Hierarchy + - History + - Home + - Horizontal List + - Info - Keep - - Remove - - Sunny - - Report - - Graph 1 - - Tune + - Keyboard + - Label + - Language + - Layout 2 + - Layout Grid + - Lightbulb + - Line Chart + - Link + - List + - Location Off + - Location On + - Lock + - Mail + - Menu + - Message + - Messenger + - Mic + - Mic Off - Mobile + - More Horizontal + - More Vertical + - Move + - Movie + - Music + - Music Info + - Music Mute + - Mute + - My Location - Newspaper - No Sound - - Label + - Notifications + - Notifications Off - Open In New - - Account Tree - - Doc - - My Location - - Write Mail - - Hand Left - - Hand Right - - Add Tab - - Sound - - Circle - - Tab + - Pan + - Paste + - Pen Tip + - Person + - Phone + - Photo + - Pie Chart + - Pin + - Play + - Play Circle + - Power Button + - Print + - Pushpin + - Question Mark + - Record Circle + - Refresh + - Remove + - Remove Location + - Repeat + - Report - Reset - - Music - - Music Mute - - Edit Doc - - Swap Vert - - Horizontal List - - Vertical List - - Layout Grid - - Uniform Grid + - Save + - Save As + - Search + - Send + - Settings + - Settings Sliders - Shopping Cart - - Messenger - - Message - - Alarm - - Color Palette - - Edit - - Draft - - User - - Bar Chart - - Pie Chart - - Line Chart + - Show Chart - Smiley - - Display - - Layout 2 + - Sound + - Sticky Note + - Stop Circle + - Sunny + - Swap Vert + - Tab + - Tag + - Thumb Down + - Thumb Up - Time - - Exit + - Tune + - Undo + - Uniform Grid + - Unlock + - Unpin + - User + - Vertical List + - Videocam + - Visibility Off + - Visibility On + - Warning + - Wifi + - Write Mail + - Zoom diff --git a/org.mixedrealitytoolkit.uxcore/StateVisualizer/Effects/TintEffect.cs b/org.mixedrealitytoolkit.uxcore/StateVisualizer/Effects/TintEffect.cs index 916fa7c01..e13f08194 100644 --- a/org.mixedrealitytoolkit.uxcore/StateVisualizer/Effects/TintEffect.cs +++ b/org.mixedrealitytoolkit.uxcore/StateVisualizer/Effects/TintEffect.cs @@ -8,6 +8,29 @@ namespace MixedReality.Toolkit.UX { + /// + /// Exposes tint color mutation on a without requiring knowledge of its generic type. + /// Used by external systems (e.g. theming) to set colors at runtime. + /// + internal interface ITintEffect + { + /// + /// The tint color applied by this effect. + /// + Color TintColor { get; set; } + + /// + /// Returns if is one of the tintable + /// objects owned by this effect. + /// + /// + /// The check is performed inside against the original + /// typed List<T>, so Unity's overloaded == operator fires correctly + /// without any upcast that would reduce the comparison to managed-wrapper reference equality. + /// + bool HasTintable(UnityEngine.Object obj); + } + /// /// An that wraps a Unity PlayableBehaviour /// component, and can tint arbitrary types of components. @@ -19,7 +42,7 @@ namespace MixedReality.Toolkit.UX /// Subclass this class to create tinting behaviour for arbitrary Unity components. /// [Serializable] - internal abstract class TintEffect : PlayableEffect, ISerializationCallbackReceiver + internal abstract class TintEffect : PlayableEffect, ITintEffect, ISerializationCallbackReceiver { /// /// A PlayableBehavior that controls the tint effect, based on the @@ -194,6 +217,9 @@ internal enum BlendType Multiply } + // Used internally to hint to the editor that this is a variable/float-based state. + // Kept in sync with the concrete subclass name via OnBeforeSerialize/OnAfterDeserialize + // so the reorderable-list header in the Inspector stays readable. [SerializeField] [HideInInspector] #pragma warning disable CS0414 // Inspector uses this as a helpful label in lists. @@ -211,10 +237,38 @@ internal enum BlendType [Tooltip("The objects to tint. All of them must share the same tint color; use separate TintEffects for different colors.")] private List tintables; + /// + bool ITintEffect.HasTintable(UnityEngine.Object obj) + { + if (tintables == null || obj == null) + { + return false; + } + + // Iterate against the original List so that Unity's overloaded == operator + // is used for the comparison, rather than managed-wrapper reference equality. + foreach (T item in tintables) + { + if (item is UnityEngine.Object unityObj && unityObj == obj) + { + return true; + } + } + + return false; + } + [SerializeField] [Tooltip("Tint color.")] private Color color = Color.white; + /// + Color ITintEffect.TintColor + { + get => color; + set => color = value; + } + [SerializeField] [Tooltip("Should the playable be played back as a one-shot triggered effect, or should the playback time be directly driven by the state's value?")] private PlayableEffect.PlaybackType playbackMode; diff --git a/org.mixedrealitytoolkit.uxcore/StateVisualizer/StateVisualizer.cs b/org.mixedrealitytoolkit.uxcore/StateVisualizer/StateVisualizer.cs index 09f58c0b3..738f256b5 100644 --- a/org.mixedrealitytoolkit.uxcore/StateVisualizer/StateVisualizer.cs +++ b/org.mixedrealitytoolkit.uxcore/StateVisualizer/StateVisualizer.cs @@ -352,9 +352,85 @@ private void OnDestroy() } /// - /// Adds the provided effect to the state with name . - /// Creates the state if it doesn't exist. + /// Sets the tint color on all effects within the named state. /// + /// The name of the state whose tint effects should be updated. + /// The color to apply. + /// + /// if the state was found and at least one tint effect was updated, + /// otherwise. + /// + public bool TrySetStateTintColor(string stateName, Color color) + { + if (!stateContainers.TryGetValue(stateName, out State state)) + { + return false; + } + + bool anyUpdated = false; + foreach (IEffect effect in state.Effects) + { + if (effect is ITintEffect tintEffect) + { + tintEffect.TintColor = color; + anyUpdated = true; + } + } + + return anyUpdated; + } + + /// + /// Sets the tint color on the within the named state whose + /// returns for + /// . + /// + /// + /// This is the preferred overload when a single state contains multiple tint effects that + /// need different colors (e.g. a background tint and an icon tint). Assign the + /// UnityEngine.Object reference directly in the Inspector — it is rename-proof and + /// breaks visibly (missing reference) rather than silently if the object is deleted. + /// + /// If is this method behaves + /// identically to and updates every + /// tint effect in the state. + /// + /// The name of the state whose tint effects should be updated. + /// A that appears in the + /// tintables list of the effect to update, or to update all tint + /// effects in the state. + /// The color to apply. + /// + /// if the state was found and at least one matching tint effect was + /// updated, otherwise. + /// + public bool TrySetStateTintColor(string stateName, UnityEngine.Object tintTarget, Color color) + { + if (tintTarget == null) + { + return TrySetStateTintColor(stateName, color); + } + + if (!stateContainers.TryGetValue(stateName, out State state)) + { + return false; + } + + bool anyUpdated = false; + foreach (IEffect effect in state.Effects) + { + if (effect is ITintEffect tintEffect && + tintEffect.HasTintable(tintTarget)) + { + tintEffect.TintColor = color; + anyUpdated = true; + } + } + + return anyUpdated; + } + + /// /// The name of the state to add the effect to. /// The effect to add. internal void AddEffect(string stateName, IEffect effect) From 128a464b7e97bfe884e374f40bddecf52a8a0db0 Mon Sep 17 00:00:00 2001 From: Kurtis Date: Tue, 19 May 2026 17:43:15 -0700 Subject: [PATCH 04/18] Reserialize scenes for Unity 6 --- .../Assets/Scenes/CanvasUITearsheet.unity | 1169 ++++++++++++++-- .../Scenes/HandInteractionExamples.unity | 1215 +++++++++++++---- 2 files changed, 1957 insertions(+), 427 deletions(-) diff --git a/UnityProjects/MRTKDevTemplate/Assets/Scenes/CanvasUITearsheet.unity b/UnityProjects/MRTKDevTemplate/Assets/Scenes/CanvasUITearsheet.unity index 71280400f..94b5fd81f 100644 --- a/UnityProjects/MRTKDevTemplate/Assets/Scenes/CanvasUITearsheet.unity +++ b/UnityProjects/MRTKDevTemplate/Assets/Scenes/CanvasUITearsheet.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 705507994} - m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 m_BakeBackend: 1 @@ -97,14 +93,14 @@ LightmapSettings: m_ExportTrainingData: 0 m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} m_LightingSettings: {fileID: 0} --- !u!196 &4 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -155,7 +151,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 65389176} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -240,20 +235,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -284,6 +282,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 47797540} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -485,6 +484,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &14426175 stripped RectTransform: @@ -528,7 +530,6 @@ RectTransform: - {fileID: 2086818868} - {fileID: 1599070117} m_Father: {fileID: 831863309} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -595,6 +596,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -612,6 +620,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 682545839} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -821,6 +830,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &30053974 stripped RectTransform: @@ -832,6 +844,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1424732237} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -1015,6 +1028,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &30664519 stripped RectTransform: @@ -1060,7 +1076,6 @@ RectTransform: - {fileID: 14426175} - {fileID: 1472954656} m_Father: {fileID: 1714867591} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -1127,6 +1142,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 12 thickness: 2 wedges: 8 @@ -1144,6 +1166,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 101034061} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -1327,6 +1350,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &47838182 stripped RectTransform: @@ -1338,12 +1364,9 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 5905304275062509466, guid: df4899a7e84d2794a9428337bba8a253, type: 3} - propertyPath: m_RootOrder - value: 4 - objectReference: {fileID: 0} - target: {fileID: 5905304275062509466, guid: df4899a7e84d2794a9428337bba8a253, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 @@ -1361,6 +1384,9 @@ PrefabInstance: value: EventSystem objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: df4899a7e84d2794a9428337bba8a253, type: 3} --- !u!1 &65389172 GameObject: @@ -1438,7 +1464,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 31 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -1460,7 +1488,6 @@ RectTransform: - {fileID: 3747106709254832807} - {fileID: 1944714597} m_Father: {fileID: 1369683957} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1472,6 +1499,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 335940727} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -1655,6 +1683,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &68209848 stripped RectTransform: @@ -1693,7 +1724,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1482164461} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1778,20 +1808,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -1849,7 +1882,6 @@ RectTransform: m_Children: - {fileID: 906057049} m_Father: {fileID: 311062483} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -1876,6 +1908,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -1920,7 +1959,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 65389176} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -2005,20 +2043,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -2049,6 +2090,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 14468906} m_Modifications: - target: {fileID: 201938300658660728, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -2236,6 +2278,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 7216918420766221479, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 1042814119} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &87540892 stripped RectTransform: @@ -2299,7 +2347,6 @@ RectTransform: - {fileID: 393337007} - {fileID: 628494713} m_Father: {fileID: 371654821} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -2364,6 +2411,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -2381,6 +2435,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1983684637} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -2564,6 +2619,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &101484292 stripped RectTransform: @@ -2575,6 +2633,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 2087755156} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -2758,6 +2817,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 6922469056340231698, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 1349327197} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &109335092 stripped RectTransform: @@ -2785,6 +2850,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1983684637} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -2968,6 +3034,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &117240531 stripped RectTransform: @@ -2979,6 +3048,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1073055405} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -3158,6 +3228,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &138829974 stripped RectTransform: @@ -3195,7 +3268,6 @@ RectTransform: - {fileID: 1488121688} - {fileID: 1854885402} m_Father: {fileID: 1092179575} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -3372,6 +3444,9 @@ MonoBehaviour: k__BackingField: 1 allowSelectByVoice: 1 speechRecognitionKeyword: select + k__BackingField: + m_PersistentCalls: + m_Calls: [] k__BackingField: 1 k__BackingField: 0 k__BackingField: @@ -3439,6 +3514,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1304147004} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -3618,6 +3694,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &151622003 stripped RectTransform: @@ -3658,7 +3737,6 @@ RectTransform: m_Children: - {fileID: 1936164015} m_Father: {fileID: 2118576653} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -3725,6 +3803,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -3769,7 +3854,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 311062483} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -3854,20 +3938,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -3898,6 +3985,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 682545839} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -4107,6 +4195,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &168021814 stripped RectTransform: @@ -4118,6 +4209,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 47797540} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -4303,6 +4395,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &173788764 stripped RectTransform: @@ -4314,6 +4409,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1905834815} m_Modifications: - target: {fileID: 1345098608517470577, guid: 16750275763719646afa2c7c7592395d, type: 3} @@ -4409,12 +4505,21 @@ PrefabInstance: value: objectReference: {fileID: 1905834816} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 16750275763719646afa2c7c7592395d, type: 3} +--- !u!224 &188341443 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: 16750275763719646afa2c7c7592395d, type: 3} + m_PrefabInstance: {fileID: 188341442} + m_PrefabAsset: {fileID: 0} --- !u!1001 &197159555 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 386957940} m_Modifications: - target: {fileID: 1345098608517470577, guid: 16750275763719646afa2c7c7592395d, type: 3} @@ -4510,12 +4615,21 @@ PrefabInstance: value: objectReference: {fileID: 386957941} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 16750275763719646afa2c7c7592395d, type: 3} +--- !u!224 &197159556 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: 16750275763719646afa2c7c7592395d, type: 3} + m_PrefabInstance: {fileID: 197159555} + m_PrefabAsset: {fileID: 0} --- !u!1001 &198110455 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 335940727} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -4699,6 +4813,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &198110456 stripped RectTransform: @@ -4736,7 +4853,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 311062483} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -4804,20 +4920,23 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -4880,7 +4999,6 @@ RectTransform: - {fileID: 880417321} - {fileID: 1403959011} m_Father: {fileID: 831863309} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -4947,6 +5065,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -4996,7 +5121,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1093577527} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -5082,20 +5206,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -5126,6 +5253,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1874031336} m_Modifications: - target: {fileID: 1345098608517470577, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} @@ -5217,12 +5345,21 @@ PrefabInstance: value: objectReference: {fileID: 1874031337} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} +--- !u!224 &276007649 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} + m_PrefabInstance: {fileID: 276007648} + m_PrefabAsset: {fileID: 0} --- !u!1001 &280014427 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1637717373} m_Modifications: - target: {fileID: 201938300658660728, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -5414,6 +5551,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 4185972052008607586, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 531191238} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &280014428 stripped RectTransform: @@ -5441,6 +5584,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1944714597} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -5618,6 +5762,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &284501559 stripped RectTransform: @@ -5629,6 +5776,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 479543587} m_Modifications: - target: {fileID: 1345098608517470577, guid: 16750275763719646afa2c7c7592395d, type: 3} @@ -5724,7 +5872,15 @@ PrefabInstance: value: objectReference: {fileID: 479543588} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 16750275763719646afa2c7c7592395d, type: 3} +--- !u!224 &290101502 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: 16750275763719646afa2c7c7592395d, type: 3} + m_PrefabInstance: {fileID: 290101501} + m_PrefabAsset: {fileID: 0} --- !u!1 &308180791 GameObject: m_ObjectHideFlags: 0 @@ -5757,7 +5913,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1653004003} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -5842,20 +5997,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -5922,7 +6080,6 @@ RectTransform: - {fileID: 1122818193} - {fileID: 1122456285} m_Father: {fileID: 1623931610} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -5986,7 +6143,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 31 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -6022,7 +6181,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1714867591} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -6107,20 +6265,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -6188,7 +6349,6 @@ RectTransform: - {fileID: 1111325864} - {fileID: 68209848} m_Father: {fileID: 371654821} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -6253,6 +6413,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -6270,6 +6437,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 101034061} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -6453,6 +6621,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &357876116 stripped RectTransform: @@ -6498,7 +6669,6 @@ RectTransform: - {fileID: 101034061} - {fileID: 335940727} m_Father: {fileID: 1158768845} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -6515,6 +6685,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1482164461} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -6716,6 +6887,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 4185972052008607586, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 197159556} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &386957939 stripped RectTransform: @@ -6743,6 +6920,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1983684637} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -6926,6 +7104,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &389055256 stripped RectTransform: @@ -6937,6 +7118,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 101034061} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -7120,6 +7302,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &393337007 stripped RectTransform: @@ -7131,6 +7316,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 2087755156} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -7326,6 +7512,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 6922469056340231698, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 2044694321} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &402425587 stripped RectTransform: @@ -7381,7 +7573,6 @@ RectTransform: m_Children: - {fileID: 1704462485} m_Father: {fileID: 311062483} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -7440,6 +7631,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1854885402} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -7679,12 +7871,16 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!1001 &443057977 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 891825324} m_Modifications: - target: {fileID: 1197545758422362387, guid: f64620d502cdf0f429efa27703913cb7, type: 3} @@ -7900,6 +8096,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f64620d502cdf0f429efa27703913cb7, type: 3} --- !u!224 &443057978 stripped RectTransform: @@ -7939,7 +8138,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1424732237} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -8018,6 +8216,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1944714597} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -8207,6 +8406,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &471693313 stripped RectTransform: @@ -8218,6 +8420,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 335940727} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -8401,6 +8604,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &475336116 stripped RectTransform: @@ -8412,6 +8618,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 773317072} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -8603,6 +8810,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 4185972052008607586, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 290101502} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &479543586 stripped RectTransform: @@ -8630,6 +8843,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 553395885} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -8827,6 +9041,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &505641634 stripped RectTransform: @@ -8838,6 +9055,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1482164461} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -9051,6 +9269,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 4185972052008607586, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 826383660} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &514014398 stripped RectTransform: @@ -9078,6 +9302,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1944714597} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -9251,6 +9476,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &519434938 stripped RectTransform: @@ -9262,12 +9490,9 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 3493013819197874656, guid: ad5b753b73e311143a85055b15cea562, type: 3} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - target: {fileID: 3493013819197874656, guid: ad5b753b73e311143a85055b15cea562, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 @@ -9289,12 +9514,16 @@ PrefabInstance: value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: ad5b753b73e311143a85055b15cea562, type: 3} --- !u!1001 &531191237 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 280014429} m_Modifications: - target: {fileID: 1345098608517470577, guid: 16750275763719646afa2c7c7592395d, type: 3} @@ -9390,12 +9619,21 @@ PrefabInstance: value: objectReference: {fileID: 280014430} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 16750275763719646afa2c7c7592395d, type: 3} +--- !u!224 &531191238 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: 16750275763719646afa2c7c7592395d, type: 3} + m_PrefabInstance: {fileID: 531191237} + m_PrefabAsset: {fileID: 0} --- !u!1001 &545482698 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1999519067} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -9575,6 +9813,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &545482699 stripped RectTransform: @@ -9618,7 +9859,6 @@ RectTransform: - {fileID: 733249950} - {fileID: 505641634} m_Father: {fileID: 1653004003} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -9685,6 +9925,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -9702,12 +9949,9 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 2351505567455720332, guid: acbf65a81ce2cf94f82a0809298acf70, type: 3} - propertyPath: m_RootOrder - value: 1 - objectReference: {fileID: 0} - target: {fileID: 2351505567455720332, guid: acbf65a81ce2cf94f82a0809298acf70, type: 3} propertyPath: m_LocalPosition.x value: 0 @@ -9757,12 +10001,16 @@ PrefabInstance: value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: acbf65a81ce2cf94f82a0809298acf70, type: 3} --- !u!1001 &576536706 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1854885402} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -10004,6 +10252,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &576536707 stripped RectTransform: @@ -10015,6 +10266,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 591035305} m_Modifications: - target: {fileID: 1345098608517470577, guid: 16750275763719646afa2c7c7592395d, type: 3} @@ -10106,12 +10358,21 @@ PrefabInstance: value: objectReference: {fileID: 591035306} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 16750275763719646afa2c7c7592395d, type: 3} +--- !u!224 &577083554 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: 16750275763719646afa2c7c7592395d, type: 3} + m_PrefabInstance: {fileID: 577083553} + m_PrefabAsset: {fileID: 0} --- !u!1001 &591035303 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 47797540} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -10357,6 +10618,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 4185972052008607586, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 577083554} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &591035304 stripped RectTransform: @@ -10384,6 +10651,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 101034061} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -10567,6 +10835,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &628494713 stripped RectTransform: @@ -10578,6 +10849,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1796335078} m_Modifications: - target: {fileID: 1197545758422362387, guid: f64620d502cdf0f429efa27703913cb7, type: 3} @@ -10705,6 +10977,9 @@ PrefabInstance: value: CanvasSlider (1) objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f64620d502cdf0f429efa27703913cb7, type: 3} --- !u!224 &630532475 stripped RectTransform: @@ -10750,7 +11025,6 @@ RectTransform: - {fileID: 168021814} - {fileID: 30053974} m_Father: {fileID: 1653004003} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -10817,6 +11091,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -10861,7 +11142,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2118576653} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -10949,20 +11229,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -10993,6 +11276,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1424732237} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -11204,6 +11488,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &695898586 stripped RectTransform: @@ -11215,6 +11502,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1122818193} m_Modifications: - target: {fileID: 3705378105823492738, guid: b85e005d231192249b7077b40a4d4e45, type: 3} @@ -11382,6 +11670,9 @@ PrefabInstance: value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: b85e005d231192249b7077b40a4d4e45, type: 3} --- !u!224 &703335399 stripped RectTransform: @@ -11413,9 +11704,8 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 705507993} m_Enabled: 1 - serializedVersion: 10 + serializedVersion: 11 m_Type: 1 - m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 @@ -11465,8 +11755,12 @@ Light: m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &705507995 Transform: m_ObjectHideFlags: 0 @@ -11474,19 +11768,20 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 705507993} + serializedVersion: 2 m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} --- !u!1001 &733249949 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 553395885} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -11684,6 +11979,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &733249950 stripped RectTransform: @@ -11727,7 +12025,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 682545839} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -11812,20 +12109,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -11856,12 +12156,9 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 7781529056550460865, guid: c07c4bd04b45c014fad0e3cd30747f06, type: 3} - propertyPath: m_RootOrder - value: 6 - objectReference: {fileID: 0} - target: {fileID: 7781529056550460865, guid: c07c4bd04b45c014fad0e3cd30747f06, type: 3} propertyPath: m_LocalPosition.x value: 0 @@ -11911,6 +12208,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 7781529056550460865, guid: c07c4bd04b45c014fad0e3cd30747f06, type: 3} + insertIndex: -1 + addedObject: {fileID: 1551252957} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c07c4bd04b45c014fad0e3cd30747f06, type: 3} --- !u!1 &773317071 GameObject: @@ -11946,7 +12249,6 @@ RectTransform: - {fileID: 1874031335} - {fileID: 479543586} m_Father: {fileID: 1329564636} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -11984,6 +12286,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1073055405} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -12163,6 +12466,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &819541700 stripped RectTransform: @@ -12174,6 +12480,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 101034061} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -12357,6 +12664,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &820958105 stripped RectTransform: @@ -12368,6 +12678,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 514014399} m_Modifications: - target: {fileID: 1345098608517470577, guid: 16750275763719646afa2c7c7592395d, type: 3} @@ -12463,7 +12774,15 @@ PrefabInstance: value: objectReference: {fileID: 514014400} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 16750275763719646afa2c7c7592395d, type: 3} +--- !u!224 &826383660 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: 16750275763719646afa2c7c7592395d, type: 3} + m_PrefabInstance: {fileID: 826383659} + m_PrefabAsset: {fileID: 0} --- !u!1 &831863308 GameObject: m_ObjectHideFlags: 0 @@ -12500,7 +12819,6 @@ RectTransform: - {fileID: 1424732237} - {fileID: 201720333} m_Father: {fileID: 2127076438} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -12512,6 +12830,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1599070118} m_Modifications: - target: {fileID: 1345098608517470577, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} @@ -12591,12 +12910,21 @@ PrefabInstance: value: objectReference: {fileID: 1599070119} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} +--- !u!224 &834000930 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} + m_PrefabInstance: {fileID: 834000929} + m_PrefabAsset: {fileID: 0} --- !u!1001 &850642144 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1424732237} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -12780,6 +13108,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &850642145 stripped RectTransform: @@ -12818,7 +13149,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 831863309} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -12903,20 +13233,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -12947,6 +13280,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 201720333} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -13126,6 +13460,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &880417321 stripped RectTransform: @@ -13168,7 +13505,6 @@ RectTransform: - {fileID: 443057978} - {fileID: 2137575391} m_Father: {fileID: 1290890163} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -13301,7 +13637,6 @@ RectTransform: m_Children: - {fileID: 1125450390} m_Father: {fileID: 85912328} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -13360,6 +13695,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 2087755156} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -13555,6 +13891,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 6922469056340231698, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 1508693225} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &924342751 stripped RectTransform: @@ -13582,6 +13924,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1073055405} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -13761,6 +14104,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &943981974 stripped RectTransform: @@ -13772,6 +14118,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1796335078} m_Modifications: - target: {fileID: 1197545758422362387, guid: f64620d502cdf0f429efa27703913cb7, type: 3} @@ -13899,6 +14246,9 @@ PrefabInstance: value: CanvasSlider (2) objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f64620d502cdf0f429efa27703913cb7, type: 3} --- !u!224 &954672193 stripped RectTransform: @@ -13910,6 +14260,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1637717373} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -14097,6 +14448,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &968557651 stripped RectTransform: @@ -14179,7 +14533,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 31 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -14197,7 +14553,6 @@ RectTransform: m_Children: - {fileID: 2118576653} m_Father: {fileID: 1369683957} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -14239,7 +14594,6 @@ RectTransform: m_Children: - {fileID: 1371947327} m_Father: {fileID: 1277251431} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -14344,6 +14698,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 2082148069247382453, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} @@ -14398,10 +14753,6 @@ PrefabInstance: propertyPath: m_Name value: SampleSceneHandMenu objectReference: {fileID: 0} - - target: {fileID: 7372669237086358568, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} - propertyPath: m_RootOrder - value: 3 - objectReference: {fileID: 0} - target: {fileID: 7372669237086358568, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} propertyPath: m_LocalPosition.x value: 0 @@ -14455,6 +14806,9 @@ PrefabInstance: value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} --- !u!1 &1023697615 GameObject: @@ -14488,7 +14842,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2118576653} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -14573,20 +14926,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -14646,7 +15002,6 @@ RectTransform: m_Children: - {fileID: 2115835485} m_Father: {fileID: 2118576653} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -14713,6 +15068,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -14730,6 +15092,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 87540893} m_Modifications: - target: {fileID: 1345098608517470577, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} @@ -14809,7 +15172,15 @@ PrefabInstance: value: objectReference: {fileID: 87540894} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} +--- !u!224 &1042814119 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} + m_PrefabInstance: {fileID: 1042814118} + m_PrefabAsset: {fileID: 0} --- !u!1 &1045922679 GameObject: m_ObjectHideFlags: 0 @@ -14842,7 +15213,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1093577527} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -14927,20 +15297,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -14971,6 +15344,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1482164461} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -15184,6 +15558,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 4185972052008607586, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 1798621954} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1048775325 stripped RectTransform: @@ -15211,6 +15591,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 773317072} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -15390,6 +15771,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1051477455 stripped RectTransform: @@ -15401,6 +15785,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1983684637} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -15584,6 +15969,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1064177822 stripped RectTransform: @@ -15627,7 +16015,6 @@ RectTransform: - {fileID: 1260305183} - {fileID: 819541700} m_Father: {fileID: 831863309} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -15694,6 +16081,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -15782,7 +16176,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 31 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -15800,7 +16196,6 @@ RectTransform: m_Children: - {fileID: 149389691} m_Father: {fileID: 1369683957} - m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -15883,7 +16278,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 31 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -15903,7 +16300,6 @@ RectTransform: - {fileID: 272965572} - {fileID: 1506166577} m_Father: {fileID: 1369683957} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -15915,6 +16311,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 101034061} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -16098,6 +16495,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1096736672 stripped RectTransform: @@ -16109,6 +16509,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 335940727} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -16292,6 +16693,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1111325864 stripped RectTransform: @@ -16329,7 +16733,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 311062483} - m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -16396,20 +16799,23 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -16470,7 +16876,6 @@ RectTransform: - {fileID: 703335399} - {fileID: 1277251431} m_Father: {fileID: 311062483} - m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -16537,6 +16942,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -16554,6 +16966,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 906057049} m_Modifications: - target: {fileID: 4270209841583229004, guid: f64620d502cdf0f429efa27703913cb7, type: 3} @@ -16661,6 +17074,9 @@ PrefabInstance: value: CanvasSlider objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f64620d502cdf0f429efa27703913cb7, type: 3} --- !u!224 &1125450390 stripped RectTransform: @@ -16672,6 +17088,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 2056942515} m_Modifications: - target: {fileID: 1197545758422362387, guid: f64620d502cdf0f429efa27703913cb7, type: 3} @@ -16799,6 +17216,9 @@ PrefabInstance: value: CanvasSlider (1) objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f64620d502cdf0f429efa27703913cb7, type: 3} --- !u!224 &1125611905 stripped RectTransform: @@ -16810,6 +17230,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1517398120} m_Modifications: - target: {fileID: 1345098608517470577, guid: 16750275763719646afa2c7c7592395d, type: 3} @@ -16905,12 +17326,21 @@ PrefabInstance: value: objectReference: {fileID: 1517398121} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 16750275763719646afa2c7c7592395d, type: 3} +--- !u!224 &1129401599 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: 16750275763719646afa2c7c7592395d, type: 3} + m_PrefabInstance: {fileID: 1129401598} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1137517785 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 2056942515} m_Modifications: - target: {fileID: 1197545758422362387, guid: f64620d502cdf0f429efa27703913cb7, type: 3} @@ -17038,6 +17468,9 @@ PrefabInstance: value: CanvasSlider objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f64620d502cdf0f429efa27703913cb7, type: 3} --- !u!224 &1137517786 stripped RectTransform: @@ -17049,6 +17482,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1999519067} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -17216,6 +17650,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1138145396 stripped RectTransform: @@ -17254,7 +17691,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1714867591} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -17341,20 +17777,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -17456,7 +17895,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 31 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -17474,7 +17915,6 @@ RectTransform: m_Children: - {fileID: 371654821} m_Father: {fileID: 1369683957} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -17486,6 +17926,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1369683957} m_Modifications: - target: {fileID: 566361764857432160, guid: e8c3ea3c1046f8b4bbd682c2b7a0e4fe, type: 3} @@ -17611,6 +18052,21 @@ PrefabInstance: value: objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 6540126486176102408, guid: e8c3ea3c1046f8b4bbd682c2b7a0e4fe, type: 3} + insertIndex: -1 + addedObject: {fileID: 151308755} + - targetCorrespondingSourceObject: {fileID: 6540126486176102408, guid: e8c3ea3c1046f8b4bbd682c2b7a0e4fe, type: 3} + insertIndex: -1 + addedObject: {fileID: 151308756} + - targetCorrespondingSourceObject: {fileID: 6540126486176102408, guid: e8c3ea3c1046f8b4bbd682c2b7a0e4fe, type: 3} + insertIndex: -1 + addedObject: {fileID: 1170466720} + - targetCorrespondingSourceObject: {fileID: 8323939510892415185, guid: e8c3ea3c1046f8b4bbd682c2b7a0e4fe, type: 3} + insertIndex: -1 + addedObject: {fileID: 1761219194} m_SourcePrefab: {fileID: 100100000, guid: e8c3ea3c1046f8b4bbd682c2b7a0e4fe, type: 3} --- !u!224 &1170466719 stripped RectTransform: @@ -17640,6 +18096,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1472954657} m_Modifications: - target: {fileID: 1345098608517470577, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} @@ -17731,7 +18188,15 @@ PrefabInstance: value: objectReference: {fileID: 1472954658} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} +--- !u!224 &1181166648 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} + m_PrefabInstance: {fileID: 1181166647} + m_PrefabAsset: {fileID: 0} --- !u!1 &1187780960 GameObject: m_ObjectHideFlags: 0 @@ -17764,7 +18229,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1714867591} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -17849,20 +18313,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -17893,6 +18360,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 101034061} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -18076,6 +18544,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1188352986 stripped RectTransform: @@ -18087,6 +18558,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 682545839} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -18284,6 +18756,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1238271666 stripped RectTransform: @@ -18295,6 +18770,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1983684637} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -18478,6 +18954,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1250963981 stripped RectTransform: @@ -18489,6 +18968,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1073055405} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -18668,6 +19148,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1260305183 stripped RectTransform: @@ -18679,6 +19162,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 335940727} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -18862,6 +19346,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1265028401 stripped RectTransform: @@ -18873,6 +19360,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 773317072} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -19056,6 +19544,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 4185972052008607586, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 1469922710} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1270681976 stripped RectTransform: @@ -19111,7 +19605,6 @@ RectTransform: - {fileID: 1729846266} - {fileID: 1005008030} m_Father: {fileID: 1122818193} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -19177,7 +19670,6 @@ RectTransform: - {fileID: 1665223376} - {fileID: 1915696964} m_Father: {fileID: 3747106709254832807} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -19242,7 +19734,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 831863309} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -19327,20 +19818,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -19400,7 +19894,6 @@ RectTransform: - {fileID: 1796335078} - {fileID: 891825324} m_Father: {fileID: 311062483} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -19453,6 +19946,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -19470,6 +19970,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1944714597} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -19655,6 +20156,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1298861446 stripped RectTransform: @@ -19695,7 +20199,6 @@ RectTransform: m_Children: - {fileID: 151622003} m_Father: {fileID: 2118576653} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -19762,6 +20265,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -19779,6 +20289,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1614318675} m_Modifications: - target: {fileID: 1345098608517470577, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} @@ -19870,12 +20381,21 @@ PrefabInstance: value: objectReference: {fileID: 1614318676} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} +--- !u!224 &1311646145 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} + m_PrefabInstance: {fileID: 1311646144} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1313191255 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1424732237} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -20059,6 +20579,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1313191256 stripped RectTransform: @@ -20100,7 +20623,6 @@ RectTransform: - {fileID: 1637717373} - {fileID: 773317072} m_Father: {fileID: 1714867591} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -20167,6 +20689,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 12 thickness: 2 wedges: 8 @@ -20184,6 +20713,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 109335093} m_Modifications: - target: {fileID: 1345098608517470577, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} @@ -20275,7 +20805,15 @@ PrefabInstance: value: objectReference: {fileID: 109335094} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} +--- !u!224 &1349327197 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} + m_PrefabInstance: {fileID: 1349327196} + m_PrefabAsset: {fileID: 0} --- !u!1 &1369683956 GameObject: m_ObjectHideFlags: 0 @@ -20299,6 +20837,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1369683956} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 1.6, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -20315,13 +20854,13 @@ Transform: - {fileID: 1092179575} - {fileID: 1623931610} m_Father: {fileID: 0} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1371947326 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1005008030} m_Modifications: - target: {fileID: 1197545758422362387, guid: f64620d502cdf0f429efa27703913cb7, type: 3} @@ -20537,6 +21076,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f64620d502cdf0f429efa27703913cb7, type: 3} --- !u!224 &1371947327 stripped RectTransform: @@ -20548,6 +21090,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 14468906} m_Modifications: - target: {fileID: 201938300658660728, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -20735,6 +21278,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 7216918420766221479, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 1427191248} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1395554708 stripped RectTransform: @@ -20762,6 +21311,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 201720333} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -20941,6 +21491,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1403959011 stripped RectTransform: @@ -20952,6 +21505,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 335940727} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -21135,6 +21689,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1419556815 stripped RectTransform: @@ -21179,7 +21736,6 @@ RectTransform: - {fileID: 850642145} - {fileID: 695898586} m_Father: {fileID: 831863309} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -21246,6 +21802,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -21263,6 +21826,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1395554709} m_Modifications: - target: {fileID: 1345098608517470577, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} @@ -21342,12 +21906,21 @@ PrefabInstance: value: objectReference: {fileID: 1395554710} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} +--- !u!224 &1427191248 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} + m_PrefabInstance: {fileID: 1427191247} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1469922709 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1270681977} m_Modifications: - target: {fileID: 1345098608517470577, guid: 16750275763719646afa2c7c7592395d, type: 3} @@ -21443,12 +22016,21 @@ PrefabInstance: value: objectReference: {fileID: 1270681978} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 16750275763719646afa2c7c7592395d, type: 3} +--- !u!224 &1469922710 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: 16750275763719646afa2c7c7592395d, type: 3} + m_PrefabInstance: {fileID: 1469922709} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1472954655 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 47797540} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -21646,6 +22228,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 6922469056340231698, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 1181166648} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1472954656 stripped RectTransform: @@ -21707,7 +22295,6 @@ RectTransform: - {fileID: 1048775325} - {fileID: 1517398119} m_Father: {fileID: 1653004003} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -21774,6 +22361,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -21818,7 +22412,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 149389691} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -21903,20 +22496,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -21974,7 +22570,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 371654821} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -22059,20 +22654,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -22103,6 +22701,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1093577527} m_Modifications: - target: {fileID: 3272530386015204673, guid: beb27f14f40963b45a9fb5d2523f4711, type: 3} @@ -22542,6 +23141,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: beb27f14f40963b45a9fb5d2523f4711, type: 3} --- !u!224 &1506166577 stripped RectTransform: @@ -22553,6 +23155,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 924342752} m_Modifications: - target: {fileID: 1345098608517470577, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} @@ -22644,7 +23247,15 @@ PrefabInstance: value: objectReference: {fileID: 924342753} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} +--- !u!224 &1508693225 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} + m_PrefabInstance: {fileID: 1508693224} + m_PrefabAsset: {fileID: 0} --- !u!1 &1512031906 GameObject: m_ObjectHideFlags: 0 @@ -22676,7 +23287,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 311062483} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -22743,20 +23353,23 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -22787,6 +23400,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1482164461} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -23000,6 +23614,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 4185972052008607586, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 1129401599} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1517398119 stripped RectTransform: @@ -23027,6 +23647,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 2086818869} m_Modifications: - target: {fileID: 1345098608517470577, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} @@ -23106,12 +23727,21 @@ PrefabInstance: value: objectReference: {fileID: 2086818870} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} +--- !u!224 &1527218382 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} + m_PrefabInstance: {fileID: 1527218381} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1540026312 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1983684637} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -23295,6 +23925,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1540026313 stripped RectTransform: @@ -23327,13 +23960,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1551252956} + serializedVersion: 2 m_LocalRotation: {x: 0.28939572, y: -0, z: -0, w: 0.9572095} m_LocalPosition: {x: -0.01144, y: -0.37624, z: 0.09883} m_LocalScale: {x: 0.23897779, y: 0.0437293, z: 0.1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 735511181} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 33.644, y: 0, z: 0} --- !u!64 &1551252958 MeshCollider: @@ -23343,9 +23976,17 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1551252956} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 4 + serializedVersion: 5 m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} @@ -23366,6 +24007,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -23404,6 +24048,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1637717373} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -23599,6 +24244,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1577565684 stripped RectTransform: @@ -23610,6 +24258,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 14468906} m_Modifications: - target: {fileID: 201938300658660728, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -23797,6 +24446,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 7216918420766221479, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 834000930} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1599070117 stripped RectTransform: @@ -23850,7 +24505,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 311062483} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -23917,20 +24571,23 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -23961,6 +24618,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1826937101} m_Modifications: - target: {fileID: 1345098608517470577, guid: 16750275763719646afa2c7c7592395d, type: 3} @@ -24056,12 +24714,21 @@ PrefabInstance: value: objectReference: {fileID: 1826937102} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 16750275763719646afa2c7c7592395d, type: 3} +--- !u!224 &1606706622 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: 16750275763719646afa2c7c7592395d, type: 3} + m_PrefabInstance: {fileID: 1606706621} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1614318673 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 2087755156} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -24257,6 +24924,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 6922469056340231698, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 1311646145} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1614318674 stripped RectTransform: @@ -24311,7 +24984,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1944714597} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -24396,20 +25068,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -24511,7 +25186,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 31 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -24529,7 +25206,6 @@ RectTransform: m_Children: - {fileID: 311062483} m_Father: {fileID: 1369683957} - m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -24541,6 +25217,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1729846266} m_Modifications: - target: {fileID: 3705378105823492738, guid: b85e005d231192249b7077b40a4d4e45, type: 3} @@ -24680,6 +25357,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: b85e005d231192249b7077b40a4d4e45, type: 3} --- !u!224 &1630388037 stripped RectTransform: @@ -24762,7 +25442,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 31 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -24780,7 +25462,6 @@ RectTransform: m_Children: - {fileID: 1653004003} m_Father: {fileID: 1369683957} - m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -24819,7 +25500,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1653004003} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -24904,20 +25584,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -24976,7 +25659,6 @@ RectTransform: - {fileID: 280014428} - {fileID: 1577565684} m_Father: {fileID: 1329564636} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -25044,7 +25726,6 @@ RectTransform: - {fileID: 308180792} - {fileID: 1635540423} m_Father: {fileID: 1635487816} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -25056,6 +25737,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 201720333} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -25235,6 +25917,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1662388757 stripped RectTransform: @@ -25246,6 +25931,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1288869893} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -25425,6 +26111,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1665223376 stripped RectTransform: @@ -25463,7 +26152,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2087755156} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -25548,20 +26236,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -25592,6 +26283,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 404960832} m_Modifications: - target: {fileID: 4270209841583229004, guid: f64620d502cdf0f429efa27703913cb7, type: 3} @@ -25699,6 +26391,9 @@ PrefabInstance: value: CanvasSlider objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f64620d502cdf0f429efa27703913cb7, type: 3} --- !u!224 &1704462485 stripped RectTransform: @@ -25710,6 +26405,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1796335078} m_Modifications: - target: {fileID: 1197545758422362387, guid: f64620d502cdf0f429efa27703913cb7, type: 3} @@ -25837,6 +26533,9 @@ PrefabInstance: value: CanvasSlider objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f64620d502cdf0f429efa27703913cb7, type: 3} --- !u!224 &1706338808 stripped RectTransform: @@ -25848,6 +26547,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 682545839} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -26057,6 +26757,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1708049806 stripped RectTransform: @@ -26100,7 +26803,6 @@ RectTransform: - {fileID: 1329564636} - {fileID: 47797540} m_Father: {fileID: 1369683957} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -26164,7 +26866,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 31 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -26203,7 +26907,6 @@ RectTransform: - {fileID: 1630388037} - {fileID: 1995220997} m_Father: {fileID: 1277251431} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -26288,6 +26991,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1854885402} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -26527,6 +27231,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!1 &1761219193 stripped GameObject: @@ -26541,9 +27248,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1761219193} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 0.99999994, y: 0.99999994, z: 0.1} m_Center: {x: 0, y: -0.000000014901161, z: 0.05} --- !u!1001 &1767162169 @@ -26551,6 +27266,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 101034061} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -26734,6 +27450,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1767162170 stripped RectTransform: @@ -26745,6 +27464,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 553395885} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -26930,6 +27650,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1773838171 stripped RectTransform: @@ -26941,6 +27664,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 335940727} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -27124,6 +27848,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1794244716 stripped RectTransform: @@ -27167,7 +27894,6 @@ RectTransform: - {fileID: 630532475} - {fileID: 954672193} m_Father: {fileID: 1290890163} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -27272,6 +27998,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1048775326} m_Modifications: - target: {fileID: 1345098608517470577, guid: 16750275763719646afa2c7c7592395d, type: 3} @@ -27367,12 +28094,21 @@ PrefabInstance: value: objectReference: {fileID: 1048775327} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 16750275763719646afa2c7c7592395d, type: 3} +--- !u!224 &1798621954 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: 16750275763719646afa2c7c7592395d, type: 3} + m_PrefabInstance: {fileID: 1798621953} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1817612629 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1288869893} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -27548,6 +28284,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1817612630 stripped RectTransform: @@ -27559,6 +28298,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 47797540} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -27760,6 +28500,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 8376646494505211229, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 1606706622} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1826937101 stripped RectTransform: @@ -27782,6 +28528,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1854885402} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -28021,6 +28768,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!1 &1854885401 GameObject: @@ -28062,7 +28812,6 @@ RectTransform: - {fileID: 368534647} - {fileID: 576536707} m_Father: {fileID: 149389691} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -28129,6 +28878,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -28204,6 +28960,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1999519067} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -28387,6 +29144,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1856862789 stripped RectTransform: @@ -28398,6 +29158,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 773317072} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -28585,6 +29346,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 6922469056340231698, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 276007649} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1874031335 stripped RectTransform: @@ -28639,7 +29406,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 831863309} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -28724,20 +29490,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -28795,7 +29564,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 553395885} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -28880,20 +29648,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -28924,6 +29695,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 335940727} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -29107,6 +29879,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1900920948 stripped RectTransform: @@ -29118,6 +29893,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1482164461} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -29331,6 +30107,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 4185972052008607586, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 188341443} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1905834814 stripped RectTransform: @@ -29358,6 +30140,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 201720333} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -29537,6 +30320,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1914810143 stripped RectTransform: @@ -29548,6 +30334,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1288869893} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -29731,6 +30518,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1915696964 stripped RectTransform: @@ -29742,6 +30532,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1983684637} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -29925,6 +30716,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1925369313 stripped RectTransform: @@ -29963,7 +30757,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 371654821} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -30051,20 +30844,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -30095,6 +30891,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 154440643} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -30280,6 +31077,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1936164015 stripped RectTransform: @@ -30325,7 +31125,6 @@ RectTransform: - {fileID: 1990262478} - {fileID: 284501559} m_Father: {fileID: 65389176} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -30392,6 +31191,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 12 thickness: 2 wedges: 8 @@ -30409,6 +31215,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 335940727} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -30592,6 +31399,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1945241971 stripped RectTransform: @@ -30603,6 +31413,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1983684637} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -30786,6 +31597,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1951361111 stripped RectTransform: @@ -30797,6 +31611,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 47797540} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -30994,6 +31809,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1955009909 stripped RectTransform: @@ -31041,7 +31859,6 @@ RectTransform: - {fileID: 389055256} - {fileID: 1925369313} m_Father: {fileID: 371654821} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -31106,6 +31923,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -31123,6 +31947,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1944714597} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -31308,6 +32133,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1990262478 stripped RectTransform: @@ -31319,6 +32147,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 682545839} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -31528,6 +32357,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &1994347811 stripped RectTransform: @@ -31539,6 +32371,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1729846266} m_Modifications: - target: {fileID: 3705378105823492738, guid: b85e005d231192249b7077b40a4d4e45, type: 3} @@ -31678,6 +32511,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: b85e005d231192249b7077b40a4d4e45, type: 3} --- !u!224 &1995220997 stripped RectTransform: @@ -31717,7 +32553,6 @@ RectTransform: - {fileID: 545482699} - {fileID: 1856862789} m_Father: {fileID: 3747106709254832807} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -31755,6 +32590,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 402425588} m_Modifications: - target: {fileID: 1345098608517470577, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} @@ -31850,7 +32686,15 @@ PrefabInstance: value: objectReference: {fileID: 402425589} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} +--- !u!224 &2044694321 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3514389556853228399, guid: f9ae8e304f5c6864980818dec2c95633, type: 3} + m_PrefabInstance: {fileID: 2044694320} + m_PrefabAsset: {fileID: 0} --- !u!1 &2056942514 GameObject: m_ObjectHideFlags: 0 @@ -31887,7 +32731,6 @@ RectTransform: - {fileID: 1137517786} - {fileID: 1125611905} m_Father: {fileID: 1277251431} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -31992,6 +32835,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 14468906} m_Modifications: - target: {fileID: 201938300658660728, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -32179,6 +33023,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 7216918420766221479, guid: c6b351a67ceb69140b199996bbbea156, type: 3} + insertIndex: -1 + addedObject: {fileID: 1527218382} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &2086818868 stripped RectTransform: @@ -32239,7 +33089,6 @@ RectTransform: - {fileID: 1614318674} - {fileID: 924342751} m_Father: {fileID: 1653004003} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -32306,6 +33155,13 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 13 thickness: 2 wedges: 8 @@ -32350,7 +33206,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 65389176} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -32437,20 +33292,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -32481,6 +33339,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1031621822} m_Modifications: - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} @@ -32660,6 +33519,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c6b351a67ceb69140b199996bbbea156, type: 3} --- !u!224 &2115835485 stripped RectTransform: @@ -32700,7 +33562,6 @@ RectTransform: - {fileID: 1304147004} - {fileID: 154440643} m_Father: {fileID: 1000460829} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -32783,7 +33644,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 31 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -32801,7 +33664,6 @@ RectTransform: m_Children: - {fileID: 831863309} m_Father: {fileID: 1369683957} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -32813,6 +33675,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 891825324} m_Modifications: - target: {fileID: 1197545758422362387, guid: f64620d502cdf0f429efa27703913cb7, type: 3} @@ -33028,6 +33891,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f64620d502cdf0f429efa27703913cb7, type: 3} --- !u!224 &2137575391 stripped RectTransform: @@ -33057,7 +33923,6 @@ RectTransform: - {fileID: 1288869893} - {fileID: 1999519067} m_Father: {fileID: 65389176} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -33144,7 +34009,25 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 radius: 12 thickness: 2 wedges: 8 calculateSmoothEdges: 1 +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 705507995} + - {fileID: 553824788} + - {fileID: 530525190} + - {fileID: 1008854671} + - {fileID: 49756652} + - {fileID: 1369683957} + - {fileID: 771189643} diff --git a/UnityProjects/MRTKDevTemplate/Assets/Scenes/HandInteractionExamples.unity b/UnityProjects/MRTKDevTemplate/Assets/Scenes/HandInteractionExamples.unity index 1042b49f7..9afb8a7df 100644 --- a/UnityProjects/MRTKDevTemplate/Assets/Scenes/HandInteractionExamples.unity +++ b/UnityProjects/MRTKDevTemplate/Assets/Scenes/HandInteractionExamples.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 705507994} - m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 m_BakeBackend: 1 @@ -97,14 +93,14 @@ LightmapSettings: m_ExportTrainingData: 0 m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} m_LightingSettings: {fileID: 0} --- !u!196 &4 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -151,6 +147,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 5174431} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0.38268343, z: -0, w: 0.92387956} m_LocalPosition: {x: -1.129, y: -0.1747, z: -0.545} m_LocalScale: {x: 1, y: 1, z: 1} @@ -159,7 +156,6 @@ Transform: - {fileID: 1710053220} - {fileID: 1998461902} m_Father: {fileID: 1203713056} - m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: -45, z: 0} --- !u!1 &6284416 GameObject: @@ -185,13 +181,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6284416} + serializedVersion: 2 m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068} m_LocalPosition: {x: 0.0917, y: -0.0671, z: 0.0163} m_LocalScale: {x: 0.00096758676, y: 0.004151988, z: 0.0017068039} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1376890154} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} --- !u!212 &6284418 SpriteRenderer: @@ -210,6 +206,9 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -270,13 +269,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 37486930} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0.38268343, z: -0, w: 0.92387956} m_LocalPosition: {x: 0.004, y: 1.749, z: -0.004} m_LocalScale: {x: 1.8175921, y: 0.05679976, z: 1.8175921} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1146931003} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &37486933 MeshRenderer: @@ -295,6 +294,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -346,9 +348,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 76807523} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 0.10026801, y: 0.082757965, z: 0.093791895} m_Center: {x: -0.00011960028, y: -0.000000057742, z: -0.008266095} --- !u!1 &76865735 @@ -382,7 +392,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 150862479} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -449,20 +458,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 @@ -500,6 +512,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -530,6 +545,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1727403011} m_Modifications: - target: {fileID: 100002, guid: 6ceef383a3dfd0a4e9c38b8d793170e4, type: 3} @@ -597,14 +613,44 @@ PrefabInstance: value: -1.22 objectReference: {fileID: 0} - target: {fileID: 2300000, guid: 6ceef383a3dfd0a4e9c38b8d793170e4, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: cfecafee97b1bac42be6698465e5bd45, type: 2} - target: {fileID: 2300002, guid: 6ceef383a3dfd0a4e9c38b8d793170e4, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: edc81f8444b03444eae776bfc3a3dd00, type: 2} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 400004, guid: 6ceef383a3dfd0a4e9c38b8d793170e4, type: 3} + insertIndex: -1 + addedObject: {fileID: 37486931} + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 100002, guid: 6ceef383a3dfd0a4e9c38b8d793170e4, type: 3} + insertIndex: -1 + addedObject: {fileID: 79416687} + - targetCorrespondingSourceObject: {fileID: 100002, guid: 6ceef383a3dfd0a4e9c38b8d793170e4, type: 3} + insertIndex: -1 + addedObject: {fileID: 79416690} + - targetCorrespondingSourceObject: {fileID: 100002, guid: 6ceef383a3dfd0a4e9c38b8d793170e4, type: 3} + insertIndex: -1 + addedObject: {fileID: 79416686} + - targetCorrespondingSourceObject: {fileID: 100002, guid: 6ceef383a3dfd0a4e9c38b8d793170e4, type: 3} + insertIndex: -1 + addedObject: {fileID: 79416688} + - targetCorrespondingSourceObject: {fileID: 100002, guid: 6ceef383a3dfd0a4e9c38b8d793170e4, type: 3} + insertIndex: -1 + addedObject: {fileID: 79416689} + - targetCorrespondingSourceObject: {fileID: 100002, guid: 6ceef383a3dfd0a4e9c38b8d793170e4, type: 3} + insertIndex: -1 + addedObject: {fileID: 79416691} + - targetCorrespondingSourceObject: {fileID: 100002, guid: 6ceef383a3dfd0a4e9c38b8d793170e4, type: 3} + insertIndex: -1 + addedObject: {fileID: 79416692} + - targetCorrespondingSourceObject: {fileID: 100004, guid: 6ceef383a3dfd0a4e9c38b8d793170e4, type: 3} + insertIndex: -1 + addedObject: {fileID: 1146931006} m_SourcePrefab: {fileID: 100100000, guid: 6ceef383a3dfd0a4e9c38b8d793170e4, type: 3} --- !u!4 &79416684 stripped Transform: @@ -637,10 +683,21 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 79416685} - serializedVersion: 2 + serializedVersion: 4 m_Mass: 0.1 m_Drag: 0 m_AngularDrag: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 1 m_IsKinematic: 0 m_Interpolate: 1 @@ -947,6 +1004,9 @@ MonoBehaviour: k__BackingField: 1 allowSelectByVoice: 1 speechRecognitionKeyword: select + k__BackingField: + m_PersistentCalls: + m_Calls: [] k__BackingField: 1 k__BackingField: 0 k__BackingField: @@ -1006,6 +1066,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -1183,7 +1244,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1913468802} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1251,20 +1311,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 @@ -1302,6 +1365,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1350,6 +1416,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 150862478} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: -0.0001, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -1362,7 +1429,6 @@ Transform: - {fileID: 1180287156} - {fileID: 4654093213557177395} m_Father: {fileID: 1203713056} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!224 &186579027 stripped RectTransform: @@ -1374,16 +1440,13 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1913468802} m_Modifications: - target: {fileID: 4125495309553998321, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} propertyPath: m_Name value: FlatPanel (1) objectReference: {fileID: 0} - - target: {fileID: 4205010513405509735, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - target: {fileID: 4205010513405509735, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} propertyPath: m_LocalScale.x value: 1 @@ -1453,6 +1516,33 @@ PrefabInstance: value: 0.00014997 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 4205010513405509735, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 305342091} + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 4125495309553998321, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 235624898} + - targetCorrespondingSourceObject: {fileID: 4125495309553998321, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 235624895} + - targetCorrespondingSourceObject: {fileID: 4125495309553998321, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 235624896} + - targetCorrespondingSourceObject: {fileID: 4125495309553998321, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 235624897} + - targetCorrespondingSourceObject: {fileID: 4125495309553998321, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 235624903} + - targetCorrespondingSourceObject: {fileID: 4125495309553998321, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 235624904} + - targetCorrespondingSourceObject: {fileID: 6056454165148638616, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 235624894} m_SourcePrefab: {fileID: 100100000, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} --- !u!4 &235624891 stripped Transform: @@ -1477,9 +1567,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 235624892} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 0.99999994, z: 0.1} m_Center: {x: 0, y: 0.000000074505806, z: 0.05} --- !u!114 &235624895 @@ -1796,6 +1894,9 @@ MonoBehaviour: k__BackingField: 1 allowSelectByVoice: 1 speechRecognitionKeyword: select + k__BackingField: + m_PersistentCalls: + m_Calls: [] k__BackingField: 1 k__BackingField: 0 k__BackingField: @@ -1919,6 +2020,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -2101,7 +2203,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1848983997} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -2174,20 +2275,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 @@ -2225,6 +2329,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2279,13 +2386,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 305342090} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -0.005910009, y: 0.0011000037, z: -0.0055999756} m_LocalScale: {x: 0.0058, y: 0.0058, z: 0.0058} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 235624891} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!212 &305342092 SpriteRenderer: @@ -2304,6 +2411,9 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2355,6 +2465,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -2456,6 +2567,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -2546,6 +2658,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 782737666} m_Modifications: - target: {fileID: 7017536481509416457, guid: 14887583e6d2db941b221cb765bee7c5, type: 3} @@ -2673,6 +2786,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 14887583e6d2db941b221cb765bee7c5, type: 3} --- !u!224 &392741045 stripped RectTransform: @@ -2703,8 +2819,17 @@ CapsuleCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 422166483} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 + serializedVersion: 2 m_Radius: 0.032281224 m_Height: 0.15444483 m_Direction: 1 @@ -2740,7 +2865,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1852224431} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -2818,20 +2942,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 @@ -2869,6 +2996,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2899,6 +3029,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1852224431} m_Modifications: - target: {fileID: 593722386012418505, guid: 7d421b6091df2b5439be946871d23d28, type: 3} @@ -2962,12 +3093,16 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 7d421b6091df2b5439be946871d23d28, type: 3} --- !u!1001 &460835580 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1848983997} m_Modifications: - target: {fileID: 1503546110793399400, guid: cd0f0697f0939504389ec612388f609a, type: 3} @@ -3111,7 +3246,7 @@ PrefabInstance: value: Icon 85 objectReference: {fileID: 0} - target: {fileID: 7855682163667943843, guid: cd0f0697f0939504389ec612388f609a, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 5762245003366665926, guid: 9b0d0ee11ff70b04d901a29b519cbaa0, type: 2} - target: {fileID: 7867802180497734224, guid: cd0f0697f0939504389ec612388f609a, type: 3} @@ -3131,6 +3266,15 @@ PrefabInstance: value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 2244185730444192509, guid: cd0f0697f0939504389ec612388f609a, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} + - targetCorrespondingSourceObject: {fileID: 4659777866328155393, guid: cd0f0697f0939504389ec612388f609a, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} m_SourcePrefab: {fileID: 100100000, guid: cd0f0697f0939504389ec612388f609a, type: 3} --- !u!4 &460835581 stripped Transform: @@ -3158,6 +3302,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1089489031} m_Modifications: - target: {fileID: 3695091241684208261, guid: a88695280288b5643abe2a6c33bad9cd, type: 3} @@ -3249,6 +3394,12 @@ PrefabInstance: value: UnityEngine.Object, UnityEngine objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 6001337464062027464, guid: a88695280288b5643abe2a6c33bad9cd, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} m_SourcePrefab: {fileID: 100100000, guid: a88695280288b5643abe2a6c33bad9cd, type: 3} --- !u!4 &502884643 stripped Transform: @@ -3260,12 +3411,9 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 3493013819197874656, guid: ad5b753b73e311143a85055b15cea562, type: 3} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - target: {fileID: 3493013819197874656, guid: ad5b753b73e311143a85055b15cea562, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 @@ -3283,6 +3431,9 @@ PrefabInstance: value: MRTKInputSimulator objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: ad5b753b73e311143a85055b15cea562, type: 3} --- !u!1 &563549573 GameObject: @@ -3317,13 +3468,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 563549573} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0.2566485, z: -0, w: 0.9665049} m_LocalPosition: {x: 0.6704, y: -0.41940457, z: 0.4235} m_LocalScale: {x: 0.0687472, y: 0.068747185, z: 0.06874721} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1727403011} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: -29.743002, z: 0} --- !u!82 &563549575 AudioSource: @@ -3336,6 +3487,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -3729,6 +3881,9 @@ MonoBehaviour: k__BackingField: 1 allowSelectByVoice: 1 speechRecognitionKeyword: select + k__BackingField: + m_PersistentCalls: + m_Calls: [] k__BackingField: 1 k__BackingField: 0 k__BackingField: @@ -3798,10 +3953,21 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 563549573} - serializedVersion: 2 + serializedVersion: 4 m_Mass: 0.1 m_Drag: 1 m_AngularDrag: 1 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 1 m_IsKinematic: 0 m_Interpolate: 1 @@ -3815,9 +3981,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 563549573} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!23 &563549580 @@ -3837,6 +4011,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -3965,6 +4142,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -4055,6 +4233,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1404428861} m_Modifications: - target: {fileID: 2712310172936119071, guid: 698c502bf492aec45af6a7b04219d34b, type: 3} @@ -4234,7 +4413,7 @@ PrefabInstance: value: UnityEngine.AudioClip, UnityEngine objectReference: {fileID: 0} - target: {fileID: 3409721415966526836, guid: 698c502bf492aec45af6a7b04219d34b, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: aed69361010390840abc588081f8e964, type: 2} - target: {fileID: 4639606898651727610, guid: 698c502bf492aec45af6a7b04219d34b, type: 3} @@ -4286,6 +4465,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 4639606898651727610, guid: 698c502bf492aec45af6a7b04219d34b, type: 3} + insertIndex: -1 + addedObject: {fileID: 343732524} m_SourcePrefab: {fileID: 100100000, guid: 698c502bf492aec45af6a7b04219d34b, type: 3} --- !u!4 &607222683 stripped Transform: @@ -4305,9 +4490,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 624982108} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 0.99999994, z: 0.1} m_Center: {x: 0, y: 0.000000074505806, z: 0.05} --- !u!1001 &663760220 @@ -4315,6 +4508,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1913468802} m_Modifications: - target: {fileID: 251265376, guid: 0d3b2fd2079cd514d8dbce654f929320, type: 3} @@ -4333,10 +4527,6 @@ PrefabInstance: propertyPath: panLevelCustomCurve.m_Curve.Array.data[0].value value: 1 objectReference: {fileID: 0} - - target: {fileID: 1214529608091387485, guid: 0d3b2fd2079cd514d8dbce654f929320, type: 3} - propertyPath: m_RootOrder - value: 4 - objectReference: {fileID: 0} - target: {fileID: 1214529608091387485, guid: 0d3b2fd2079cd514d8dbce654f929320, type: 3} propertyPath: m_LocalPosition.x value: -0.406 @@ -4382,6 +4572,9 @@ PrefabInstance: value: CoffeeBoundsControl (1) objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 0d3b2fd2079cd514d8dbce654f929320, type: 3} --- !u!1 &665858362 GameObject: @@ -4414,7 +4607,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 782737666} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -4482,20 +4674,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 @@ -4533,6 +4728,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -4588,9 +4786,8 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 705507993} m_Enabled: 1 - serializedVersion: 10 + serializedVersion: 11 m_Type: 1 - m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 @@ -4640,8 +4837,12 @@ Light: m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &705507995 Transform: m_ObjectHideFlags: 0 @@ -4649,13 +4850,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 705507993} + serializedVersion: 2 m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} --- !u!1 &730431820 GameObject: @@ -4688,7 +4889,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1913468802} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -4756,20 +4956,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 @@ -4807,6 +5010,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -4847,12 +5053,9 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 7781529056550460865, guid: c07c4bd04b45c014fad0e3cd30747f06, type: 3} - propertyPath: m_RootOrder - value: 6 - objectReference: {fileID: 0} - target: {fileID: 7781529056550460865, guid: c07c4bd04b45c014fad0e3cd30747f06, type: 3} propertyPath: m_LocalPosition.x value: 0 @@ -4902,6 +5105,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 7781529056550460865, guid: c07c4bd04b45c014fad0e3cd30747f06, type: 3} + insertIndex: -1 + addedObject: {fileID: 1551252957} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c07c4bd04b45c014fad0e3cd30747f06, type: 3} --- !u!1 &782737665 GameObject: @@ -4926,6 +5135,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 782737665} + serializedVersion: 2 m_LocalRotation: {x: 0, y: -0.38268343, z: 0, w: 0.92387956} m_LocalPosition: {x: -0.769, y: -0.403, z: -0.264} m_LocalScale: {x: 1, y: 1, z: 1} @@ -4936,7 +5146,6 @@ Transform: - {fileID: 2128020770} - {fileID: 392741045} m_Father: {fileID: 1203713056} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: -45, z: 0} --- !u!1 &828245819 GameObject: @@ -4969,7 +5178,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1913468802} - m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -5037,20 +5245,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 @@ -5088,6 +5299,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -5118,6 +5332,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 150862479} m_Modifications: - target: {fileID: 3482465368609989420, guid: 8beb1e0a00bf1eb42921a53ffb52bdeb, type: 3} @@ -5185,10 +5400,22 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} - target: {fileID: 5486639398703893882, guid: 8beb1e0a00bf1eb42921a53ffb52bdeb, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: b499c1bdbc12cd648937c46a2a6f8b01, type: 2} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 3482465368609989420, guid: 8beb1e0a00bf1eb42921a53ffb52bdeb, type: 3} + insertIndex: -1 + addedObject: {fileID: 1256458038} + - targetCorrespondingSourceObject: {fileID: 3482465368609989420, guid: 8beb1e0a00bf1eb42921a53ffb52bdeb, type: 3} + insertIndex: -1 + addedObject: {fileID: 1256458039} + - targetCorrespondingSourceObject: {fileID: 7047533903058496966, guid: 8beb1e0a00bf1eb42921a53ffb52bdeb, type: 3} + insertIndex: -1 + addedObject: {fileID: 1617622750} m_SourcePrefab: {fileID: 100100000, guid: 8beb1e0a00bf1eb42921a53ffb52bdeb, type: 3} --- !u!4 &831445128 stripped Transform: @@ -5200,16 +5427,13 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1913468802} m_Modifications: - target: {fileID: 4125495309553998321, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} propertyPath: m_Name value: FlatPanel objectReference: {fileID: 0} - - target: {fileID: 4205010513405509735, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} - propertyPath: m_RootOrder - value: 1 - objectReference: {fileID: 0} - target: {fileID: 4205010513405509735, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} propertyPath: m_LocalScale.x value: 1 @@ -5279,6 +5503,33 @@ PrefabInstance: value: 0.00014997 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 4205010513405509735, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 2026715037} + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 4125495309553998321, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 840468523} + - targetCorrespondingSourceObject: {fileID: 4125495309553998321, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 840468519} + - targetCorrespondingSourceObject: {fileID: 4125495309553998321, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 840468520} + - targetCorrespondingSourceObject: {fileID: 4125495309553998321, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 840468521} + - targetCorrespondingSourceObject: {fileID: 4125495309553998321, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 840468522} + - targetCorrespondingSourceObject: {fileID: 4125495309553998321, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 840468524} + - targetCorrespondingSourceObject: {fileID: 6056454165148638616, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 624982110} m_SourcePrefab: {fileID: 100100000, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} --- !u!4 &840468517 stripped Transform: @@ -5686,6 +5937,9 @@ MonoBehaviour: k__BackingField: 1 allowSelectByVoice: 1 speechRecognitionKeyword: select + k__BackingField: + m_PersistentCalls: + m_Calls: [] k__BackingField: 1 k__BackingField: 0 k__BackingField: @@ -5745,6 +5999,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -5927,13 +6182,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 888851581} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0.43443066, z: -0, w: 0.90070534} m_LocalPosition: {x: 0.6121, y: -0.49410006, z: 0.4318} m_LocalScale: {x: 0.06874721, y: 0.068747185, z: 0.06874721} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1727403011} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: -51.498, z: 0} --- !u!114 &888851583 MonoBehaviour: @@ -6243,6 +6498,9 @@ MonoBehaviour: k__BackingField: 1 allowSelectByVoice: 1 speechRecognitionKeyword: select + k__BackingField: + m_PersistentCalls: + m_Calls: [] k__BackingField: 1 k__BackingField: 0 k__BackingField: @@ -6316,6 +6574,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -6408,10 +6667,21 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 888851581} - serializedVersion: 2 + serializedVersion: 4 m_Mass: 0.1 m_Drag: 1 m_AngularDrag: 1 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 1 m_IsKinematic: 0 m_Interpolate: 1 @@ -6425,9 +6695,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 888851581} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!23 &888851588 @@ -6447,6 +6725,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -6585,7 +6866,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2131597836} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -6661,20 +6941,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 @@ -6712,6 +6995,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -6906,6 +7192,9 @@ MonoBehaviour: k__BackingField: 1 allowSelectByVoice: 1 speechRecognitionKeyword: select + k__BackingField: + m_PersistentCalls: + m_Calls: [] k__BackingField: 1 k__BackingField: 0 k__BackingField: @@ -6976,9 +7265,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 958324214} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 0.99999994, y: 1.0000001, z: 0.099999994} m_Center: {x: 0, y: 0, z: 0.049999997} --- !u!114 &958324218 @@ -7004,6 +7301,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1089489031} m_Modifications: - target: {fileID: 372063525408016474, guid: ebf6a177e3199274b8bd12a0c8157f29, type: 3} @@ -7095,6 +7393,12 @@ PrefabInstance: value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 372063526549692233, guid: ebf6a177e3199274b8bd12a0c8157f29, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} m_SourcePrefab: {fileID: 100100000, guid: ebf6a177e3199274b8bd12a0c8157f29, type: 3} --- !u!4 &1001175448 stripped Transform: @@ -7106,6 +7410,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1404428861} m_Modifications: - target: {fileID: 1963561307345040800, guid: 05b6a9dff71e6224982f4d56166f710f, type: 3} @@ -7345,10 +7650,16 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} - target: {fileID: 1963561309274324397, guid: 05b6a9dff71e6224982f4d56166f710f, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: 0c3570eeff29ef44e9fed596a4cc3ffd, type: 2} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 1963561307345040800, guid: 05b6a9dff71e6224982f4d56166f710f, type: 3} + insertIndex: -1 + addedObject: {fileID: 573431357} m_SourcePrefab: {fileID: 100100000, guid: 05b6a9dff71e6224982f4d56166f710f, type: 3} --- !u!4 &1002036032 stripped Transform: @@ -7383,6 +7694,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1089489030} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: -0.0528, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -7395,7 +7707,6 @@ Transform: - {fileID: 1001175448} - {fileID: 1669647714} m_Father: {fileID: 1852224431} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1099479633 GameObject: @@ -7428,7 +7739,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 782737666} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -7493,20 +7803,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 @@ -7544,6 +7857,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -7587,9 +7903,17 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1146931002} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 4 + serializedVersion: 5 m_Convex: 1 m_CookingOptions: -1 m_Mesh: {fileID: -1636560234873357706, guid: 3ceb984318b1e34419d826d447ca4eec, type: 3} @@ -7606,9 +7930,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1149607822} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1.0000004, z: 0.100000024} m_Center: {x: 0.00000017881393, y: -4.440892e-17, z: 0.050000012} --- !u!1001 &1170466718 @@ -7616,6 +7948,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1203713056} m_Modifications: - target: {fileID: 566361764857432160, guid: e8c3ea3c1046f8b4bbd682c2b7a0e4fe, type: 3} @@ -7648,10 +7981,6 @@ PrefabInstance: propertyPath: m_Pivot.y value: 0.5 objectReference: {fileID: 0} - - target: {fileID: 3220012215463627515, guid: e8c3ea3c1046f8b4bbd682c2b7a0e4fe, type: 3} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - target: {fileID: 3220012215463627515, guid: e8c3ea3c1046f8b4bbd682c2b7a0e4fe, type: 3} propertyPath: m_AnchorMax.x value: 0 @@ -7755,6 +8084,21 @@ PrefabInstance: BasicPressableButtonVisuals.cs' objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 8323939510892415185, guid: e8c3ea3c1046f8b4bbd682c2b7a0e4fe, type: 3} + insertIndex: -1 + addedObject: {fileID: 958324217} + - targetCorrespondingSourceObject: {fileID: 8323939510892415185, guid: e8c3ea3c1046f8b4bbd682c2b7a0e4fe, type: 3} + insertIndex: -1 + addedObject: {fileID: 958324215} + - targetCorrespondingSourceObject: {fileID: 8323939510892415185, guid: e8c3ea3c1046f8b4bbd682c2b7a0e4fe, type: 3} + insertIndex: -1 + addedObject: {fileID: 958324216} + - targetCorrespondingSourceObject: {fileID: 8323939510892415185, guid: e8c3ea3c1046f8b4bbd682c2b7a0e4fe, type: 3} + insertIndex: -1 + addedObject: {fileID: 958324218} m_SourcePrefab: {fileID: 100100000, guid: e8c3ea3c1046f8b4bbd682c2b7a0e4fe, type: 3} --- !u!224 &1170466719 stripped RectTransform: @@ -7792,7 +8136,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 150862479} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -7866,20 +8209,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 @@ -7917,6 +8263,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -7965,6 +8314,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1203713055} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -0.061, y: 1.769, z: 1.104} m_LocalScale: {x: 1, y: 1, z: 1} @@ -7981,7 +8331,6 @@ Transform: - {fileID: 469873930} - {fileID: 5174432} m_Father: {fileID: 0} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1232423736 GameObject: @@ -8014,6 +8363,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1232423736} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0.583, y: -0.043, z: 0.726} m_LocalScale: {x: 1.4077, y: 1.4077, z: 1.4077} @@ -8021,7 +8371,6 @@ Transform: m_Children: - {fileID: 1823018503} m_Father: {fileID: 2131597836} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!65 &1232423738 BoxCollider: @@ -8031,9 +8380,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1232423736} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 0.16749653, y: 0.16336748, z: 0.15683585} m_Center: {x: 0.0008220735, y: 0.0052850842, z: -0.024257582} --- !u!82 &1232423739 @@ -8047,6 +8404,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -8392,6 +8750,9 @@ MonoBehaviour: k__BackingField: 1 allowSelectByVoice: 1 speechRecognitionKeyword: select + k__BackingField: + m_PersistentCalls: + m_Calls: [] k__BackingField: 1 k__BackingField: 0 k__BackingField: @@ -8568,7 +8929,7 @@ MonoBehaviour: transitionDuration: 0 --- !u!95 &1232423744 Animator: - serializedVersion: 5 + serializedVersion: 7 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -8582,6 +8943,7 @@ Animator: m_ApplyRootMotion: 0 m_LinearVelocityBlending: 0 m_StabilizeFeet: 0 + m_AnimatePhysics: 0 m_WarningMessage: m_HasTransformHierarchy: 1 m_AllowConstantClipSamplingOptimization: 1 @@ -8610,12 +8972,9 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 2351505567455720332, guid: acbf65a81ce2cf94f82a0809298acf70, type: 3} - propertyPath: m_RootOrder - value: 3 - objectReference: {fileID: 0} - target: {fileID: 2351505567455720332, guid: acbf65a81ce2cf94f82a0809298acf70, type: 3} propertyPath: m_LocalPosition.x value: 0 @@ -8665,6 +9024,9 @@ PrefabInstance: value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: acbf65a81ce2cf94f82a0809298acf70, type: 3} --- !u!1 &1256458037 stripped GameObject: @@ -8682,6 +9044,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -8942,6 +9305,9 @@ MonoBehaviour: k__BackingField: 1 allowSelectByVoice: 1 speechRecognitionKeyword: select + k__BackingField: + m_PersistentCalls: + m_Calls: [] k__BackingField: 1 k__BackingField: 0 k__BackingField: @@ -8966,6 +9332,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1404428861} m_Modifications: - target: {fileID: 1963561307345040800, guid: 05b6a9dff71e6224982f4d56166f710f, type: 3} @@ -9205,10 +9572,16 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} - target: {fileID: 1963561309274324397, guid: 05b6a9dff71e6224982f4d56166f710f, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: 0c3570eeff29ef44e9fed596a4cc3ffd, type: 2} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 1963561307345040800, guid: 05b6a9dff71e6224982f4d56166f710f, type: 3} + insertIndex: -1 + addedObject: {fileID: 1270236527} m_SourcePrefab: {fileID: 100100000, guid: 05b6a9dff71e6224982f4d56166f710f, type: 3} --- !u!4 &1270236525 stripped Transform: @@ -9231,6 +9604,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -9321,6 +9695,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1727403011} m_Modifications: - target: {fileID: 100018, guid: f9a8072f5d9b92347a999f10f01b8012, type: 3} @@ -9432,6 +9807,45 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 100018, guid: f9a8072f5d9b92347a999f10f01b8012, type: 3} + insertIndex: -1 + addedObject: {fileID: 1294530694} + - targetCorrespondingSourceObject: {fileID: 100018, guid: f9a8072f5d9b92347a999f10f01b8012, type: 3} + insertIndex: -1 + addedObject: {fileID: 1294530698} + - targetCorrespondingSourceObject: {fileID: 100018, guid: f9a8072f5d9b92347a999f10f01b8012, type: 3} + insertIndex: -1 + addedObject: {fileID: 1294530696} + - targetCorrespondingSourceObject: {fileID: 100018, guid: f9a8072f5d9b92347a999f10f01b8012, type: 3} + insertIndex: -1 + addedObject: {fileID: 1294530697} + - targetCorrespondingSourceObject: {fileID: 100018, guid: f9a8072f5d9b92347a999f10f01b8012, type: 3} + insertIndex: -1 + addedObject: {fileID: 1294530699} + - targetCorrespondingSourceObject: {fileID: 100018, guid: f9a8072f5d9b92347a999f10f01b8012, type: 3} + insertIndex: -1 + addedObject: {fileID: 1294530700} + - targetCorrespondingSourceObject: {fileID: 100018, guid: f9a8072f5d9b92347a999f10f01b8012, type: 3} + insertIndex: -1 + addedObject: {fileID: 1294530701} + - targetCorrespondingSourceObject: {fileID: 100020, guid: f9a8072f5d9b92347a999f10f01b8012, type: 3} + insertIndex: -1 + addedObject: {fileID: 1959878137} + - targetCorrespondingSourceObject: {fileID: 100022, guid: f9a8072f5d9b92347a999f10f01b8012, type: 3} + insertIndex: -1 + addedObject: {fileID: 422166484} + - targetCorrespondingSourceObject: {fileID: 100024, guid: f9a8072f5d9b92347a999f10f01b8012, type: 3} + insertIndex: -1 + addedObject: {fileID: 2126969655} + - targetCorrespondingSourceObject: {fileID: 100012, guid: f9a8072f5d9b92347a999f10f01b8012, type: 3} + insertIndex: -1 + addedObject: {fileID: 1393598444} + - targetCorrespondingSourceObject: {fileID: 100016, guid: f9a8072f5d9b92347a999f10f01b8012, type: 3} + insertIndex: -1 + addedObject: {fileID: 76807524} m_SourcePrefab: {fileID: 100100000, guid: f9a8072f5d9b92347a999f10f01b8012, type: 3} --- !u!4 &1294530692 stripped Transform: @@ -9450,10 +9864,21 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1294530693} - serializedVersion: 2 + serializedVersion: 4 m_Mass: 0.1 m_Drag: 0 m_AngularDrag: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 1 m_IsKinematic: 0 m_Interpolate: 1 @@ -9647,6 +10072,9 @@ MonoBehaviour: k__BackingField: 1 allowSelectByVoice: 1 speechRecognitionKeyword: select + k__BackingField: + m_PersistentCalls: + m_Calls: [] k__BackingField: 1 k__BackingField: 0 k__BackingField: @@ -9720,6 +10148,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -9879,11 +10308,6 @@ MonoBehaviour: minimumScale: {x: 0.2, y: 0.2, z: 0.2} maximumScale: {x: 2, y: 2, z: 2} relativeToInitialState: 1 ---- !u!1 &1346790086 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 7781529056550460866, guid: c07c4bd04b45c014fad0e3cd30747f06, type: 3} - m_PrefabInstance: {fileID: 771189643} - m_PrefabAsset: {fileID: 0} --- !u!82 &1351537950 stripped AudioSource: m_CorrespondingSourceObject: {fileID: 155148266066309764, guid: 8f6fb5f907837b645a884d67d7b70393, type: 3} @@ -9922,13 +10346,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1357057977} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0.2566485, z: -0, w: 0.9665049} m_LocalPosition: {x: 0.679, y: -0.4941, z: 0.48800004} m_LocalScale: {x: 0.0687472, y: 0.068747185, z: 0.06874721} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1727403011} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: -29.743002, z: 0} --- !u!114 &1357057979 MonoBehaviour: @@ -10238,6 +10662,9 @@ MonoBehaviour: k__BackingField: 1 allowSelectByVoice: 1 speechRecognitionKeyword: select + k__BackingField: + m_PersistentCalls: + m_Calls: [] k__BackingField: 1 k__BackingField: 0 k__BackingField: @@ -10311,6 +10738,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -10403,10 +10831,21 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1357057977} - serializedVersion: 2 + serializedVersion: 4 m_Mass: 0.1 m_Drag: 1 m_AngularDrag: 1 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 1 m_IsKinematic: 0 m_Interpolate: 1 @@ -10420,9 +10859,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1357057977} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!23 &1357057984 @@ -10442,6 +10889,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -10580,7 +11030,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1852224431} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -10646,20 +11095,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 @@ -10697,6 +11149,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -10755,13 +11210,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1357838088} + serializedVersion: 2 m_LocalRotation: {x: -0, y: 0.03280899, z: -0, w: 0.9994617} m_LocalPosition: {x: 0.725, y: -0.49410006, z: 0.413} m_LocalScale: {x: 0.06874719, y: 0.068747185, z: 0.0687472} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1727403011} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 3.76, z: 0} --- !u!114 &1357838090 MonoBehaviour: @@ -11071,6 +11526,9 @@ MonoBehaviour: k__BackingField: 1 allowSelectByVoice: 1 speechRecognitionKeyword: select + k__BackingField: + m_PersistentCalls: + m_Calls: [] k__BackingField: 1 k__BackingField: 0 k__BackingField: @@ -11144,6 +11602,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -11236,10 +11695,21 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1357838088} - serializedVersion: 2 + serializedVersion: 4 m_Mass: 0.1 m_Drag: 1 m_AngularDrag: 1 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 1 m_IsKinematic: 0 m_Interpolate: 1 @@ -11253,9 +11723,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1357838088} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!23 &1357838095 @@ -11275,6 +11753,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -11387,6 +11868,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1089489031} m_Modifications: - target: {fileID: 2783974331088143781, guid: c25d8f2d22117bd40ad824684551fbde, type: 3} @@ -11474,6 +11956,15 @@ PrefabInstance: value: UnityEngine.Object, UnityEngine objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 5092507606405556712, guid: c25d8f2d22117bd40ad824684551fbde, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} + - targetCorrespondingSourceObject: {fileID: 1811028555225687572, guid: c25d8f2d22117bd40ad824684551fbde, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} m_SourcePrefab: {fileID: 100100000, guid: c25d8f2d22117bd40ad824684551fbde, type: 3} --- !u!4 &1364289930 stripped Transform: @@ -11485,10 +11976,11 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1708103290} m_Modifications: - target: {fileID: 3148769097004162997, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: fa21a874e3f75f84f8a7d806d8809ca0, type: 2} - target: {fileID: 4125495309553998321, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} @@ -11572,6 +12064,15 @@ PrefabInstance: value: -0.0072 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 4205010513405509735, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 6284417} + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 6056454165148638616, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} + insertIndex: -1 + addedObject: {fileID: 1149607826} m_SourcePrefab: {fileID: 100100000, guid: c2f49d0d909d3fc4bbc20d1cb743ab1d, type: 3} --- !u!4 &1376890154 stripped Transform: @@ -11591,9 +12092,17 @@ SphereCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1393598443} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Radius: 0.08828581 m_Center: {x: 0, y: 0, z: 0} --- !u!1 &1404428860 @@ -11619,6 +12128,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1404428860} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: -0.0349, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -11630,7 +12140,6 @@ Transform: - {fileID: 4326491061339189} - {fileID: 1270236525} m_Father: {fileID: 1852224431} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!82 &1455400526 stripped AudioSource: @@ -11650,9 +12159,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1470489459} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 0.14754184, y: 0.24699001, z: 0.14326136} m_Center: {x: 0.00059055915, y: 0.12349499, z: -0.011793165} --- !u!114 &1470489464 @@ -11700,13 +12217,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1551252956} + serializedVersion: 2 m_LocalRotation: {x: 0.28939572, y: -0, z: -0, w: 0.9572095} m_LocalPosition: {x: -0.01144, y: -0.37624, z: 0.09883} m_LocalScale: {x: 0.23897779, y: 0.0437293, z: 0.1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 735511181} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 33.644, y: 0, z: 0} --- !u!64 &1551252958 MeshCollider: @@ -11716,9 +12233,17 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1551252956} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 4 + serializedVersion: 5 m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} @@ -11739,6 +12264,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -11790,9 +12318,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1617622746} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1.7013047, y: 1.7013043, z: 1.7013047} m_Center: {x: 0.00000047683716, y: -0.00000011920929, z: 0} --- !u!1001 &1669647713 @@ -11800,6 +12336,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1089489031} m_Modifications: - target: {fileID: 1220126735185249923, guid: 5e1e5c2fb89ded5469dd37ccbed1a896, type: 3} @@ -11883,7 +12420,7 @@ PrefabInstance: value: objectReference: {fileID: 9100000, guid: e3404cf816858784985fd5888cefbbb1, type: 2} - target: {fileID: 7119852961148484655, guid: 5e1e5c2fb89ded5469dd37ccbed1a896, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 5762245003366665926, guid: 9b0d0ee11ff70b04d901a29b519cbaa0, type: 2} - target: {fileID: 8133592760163744572, guid: 5e1e5c2fb89ded5469dd37ccbed1a896, type: 3} @@ -11899,6 +12436,15 @@ PrefabInstance: value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 1220126735637944177, guid: 5e1e5c2fb89ded5469dd37ccbed1a896, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} + - targetCorrespondingSourceObject: {fileID: 5719829374270691469, guid: 5e1e5c2fb89ded5469dd37ccbed1a896, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} m_SourcePrefab: {fileID: 100100000, guid: 5e1e5c2fb89ded5469dd37ccbed1a896, type: 3} --- !u!4 &1669647714 stripped Transform: @@ -11910,6 +12456,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 150862479} m_Modifications: - target: {fileID: 854254128426986228, guid: 7148f9ce86f62ab4b8d89dc6cfa369a0, type: 3} @@ -12045,6 +12592,9 @@ PrefabInstance: value: objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 7148f9ce86f62ab4b8d89dc6cfa369a0, type: 3} --- !u!4 &1685298795 stripped Transform: @@ -12074,6 +12624,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1708103289} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0.38268343, z: 0, w: 0.92387956} m_LocalPosition: {x: 0.077, y: 0, z: -0.072} m_LocalScale: {x: 1, y: 1, z: 1} @@ -12083,7 +12634,6 @@ Transform: - {fileID: 2131597836} - {fileID: 1727403011} m_Father: {fileID: 1203713056} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 45, z: 0} --- !u!1 &1710053216 GameObject: @@ -12346,6 +12896,9 @@ MonoBehaviour: k__BackingField: 1 allowSelectByVoice: 1 speechRecognitionKeyword: select + k__BackingField: + m_PersistentCalls: + m_Calls: [] k__BackingField: 1 k__BackingField: 0 k__BackingField: @@ -12415,6 +12968,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1710053216} + serializedVersion: 2 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} @@ -12422,7 +12976,6 @@ Transform: m_Children: - {fileID: 186579027} m_Father: {fileID: 5174432} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!82 &1710053221 AudioSource: @@ -12435,6 +12988,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -12803,6 +13357,9 @@ MonoBehaviour: k__BackingField: 1 allowSelectByVoice: 1 speechRecognitionKeyword: select + k__BackingField: + m_PersistentCalls: + m_Calls: [] k__BackingField: 1 k__BackingField: 0 k__BackingField: @@ -12876,6 +13433,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -13075,7 +13633,7 @@ MonoBehaviour: transitionDuration: 0 --- !u!95 &1724991371 Animator: - serializedVersion: 5 + serializedVersion: 7 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -13089,6 +13647,7 @@ Animator: m_ApplyRootMotion: 0 m_LinearVelocityBlending: 0 m_StabilizeFeet: 0 + m_AnimatePhysics: 0 m_WarningMessage: m_HasTransformHierarchy: 1 m_AllowConstantClipSamplingOptimization: 1 @@ -13117,6 +13676,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1727403010} + serializedVersion: 2 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} @@ -13129,7 +13689,6 @@ Transform: - {fileID: 79416684} - {fileID: 1294530692} m_Father: {fileID: 1708103290} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!82 &1729004921 stripped AudioSource: @@ -13141,6 +13700,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1089489031} m_Modifications: - target: {fileID: 2285124468144155093, guid: 8ace9c04082e8ce4ea440f9bef681ce3, type: 3} @@ -13152,7 +13712,7 @@ PrefabInstance: value: objectReference: {fileID: 5762245003366665926, guid: 9b0d0ee11ff70b04d901a29b519cbaa0, type: 2} - target: {fileID: 3060986453813667140, guid: 8ace9c04082e8ce4ea440f9bef681ce3, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 5762245003366665926, guid: 9b0d0ee11ff70b04d901a29b519cbaa0, type: 2} - target: {fileID: 3119290704008432693, guid: 8ace9c04082e8ce4ea440f9bef681ce3, type: 3} @@ -13248,6 +13808,15 @@ PrefabInstance: value: PressableButton_128x32mm_IconAndText_L objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 6366612889032461850, guid: 8ace9c04082e8ce4ea440f9bef681ce3, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} + - targetCorrespondingSourceObject: {fileID: 564332035890725350, guid: 8ace9c04082e8ce4ea440f9bef681ce3, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} m_SourcePrefab: {fileID: 100100000, guid: 8ace9c04082e8ce4ea440f9bef681ce3, type: 3} --- !u!4 &1758148431 stripped Transform: @@ -13285,7 +13854,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1852224431} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -13350,20 +13918,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 @@ -13401,6 +13972,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -13452,13 +14026,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1823018502} + serializedVersion: 2 m_LocalRotation: {x: -0.0009970319, y: 0.84594023, z: 0.00047610726, w: 0.5332766} m_LocalPosition: {x: 0, y: -0.0749, z: -0.028} m_LocalScale: {x: 0.7956348, y: 0.79563415, z: 0.7956348} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1232423737} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: -0.107, y: 115.546, z: -0.068} --- !u!23 &1823018504 MeshRenderer: @@ -13477,6 +14051,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -13534,6 +14111,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1203713056} m_Modifications: - target: {fileID: 443995632, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} @@ -13584,18 +14162,6 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 150949528621185834, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_LocalScale.x - value: 0.04 - objectReference: {fileID: 0} - - target: {fileID: 150949528621185834, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_LocalScale.y - value: 0.137 - objectReference: {fileID: 0} - - target: {fileID: 150949528621185834, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_LocalPosition.y - value: 0.048499994 - objectReference: {fileID: 0} - target: {fileID: 284030044009447867, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} propertyPath: Spatialize value: 1 @@ -13608,18 +14174,6 @@ PrefabInstance: propertyPath: panLevelCustomCurve.m_Curve.Array.data[0].value value: 1 objectReference: {fileID: 0} - - target: {fileID: 402277338338922732, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_UseGravity - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 534244713576997589, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_text - value: "\uF34D" - objectReference: {fileID: 0} - - target: {fileID: 534244713576997589, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_sharedMaterial - value: - objectReference: {fileID: 5762245003366665926, guid: 9b0d0ee11ff70b04d901a29b519cbaa0, type: 2} - target: {fileID: 724323403903675551, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} propertyPath: m_AnchorMax.y value: 0 @@ -13640,18 +14194,6 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 942987468863586275, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_LocalPosition.y - value: 0.03299999 - objectReference: {fileID: 0} - - target: {fileID: 942987469246865708, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_LocalPosition.y - value: 0.06499999 - objectReference: {fileID: 0} - - target: {fileID: 942987469383587423, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_LocalPosition.y - value: 0.09699999 - objectReference: {fileID: 0} - target: {fileID: 986953982429952368, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} propertyPath: m_Name value: WhiteboardExample @@ -13685,7 +14227,7 @@ PrefabInstance: value: Icon 79 objectReference: {fileID: 0} - target: {fileID: 1287902911309006504, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 5762245003366665926, guid: 9b0d0ee11ff70b04d901a29b519cbaa0, type: 2} - target: {fileID: 1510911413115419833, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} @@ -13736,10 +14278,6 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2236187689672624870, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - target: {fileID: 2599463952435006009, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} propertyPath: m_text value: "\uF36A" @@ -13776,18 +14314,6 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3484184696762796712, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3649796767034289732, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_Materials.Array.data[0] - value: - objectReference: {fileID: 5762245003366665926, guid: 9b0d0ee11ff70b04d901a29b519cbaa0, type: 2} - - target: {fileID: 3717038121812215605, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: currentIconName - value: Icon 76 - objectReference: {fileID: 0} - target: {fileID: 4024654762168814417, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} propertyPath: m_Size.y value: 32 @@ -13824,14 +14350,6 @@ PrefabInstance: propertyPath: panLevelCustomCurve.m_Curve.Array.data[0].value value: 1 objectReference: {fileID: 0} - - target: {fileID: 4649580226607449371, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4649580226607449371, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_AnchoredPosition.x - value: 0.007 - objectReference: {fileID: 0} - target: {fileID: 5037185138549003642, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} propertyPath: m_AnchorMax.y value: 0 @@ -13940,14 +14458,6 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6439058074634937319, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_LocalPosition.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 6439058074634937319, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_AnchoredPosition.x - value: -0.0245 - objectReference: {fileID: 0} - target: {fileID: 6709910909478096088, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} propertyPath: m_AnchorMax.y value: 0 @@ -14028,22 +14538,6 @@ PrefabInstance: propertyPath: k__BackingField.m_PersistentCalls.m_Calls.Array.data[1].m_Arguments.m_ObjectArgumentAssemblyTypeName value: UnityEngine.Object, UnityEngine objectReference: {fileID: 0} - - target: {fileID: 7613463721665348061, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_LocalPosition.y - value: 0.016499994 - objectReference: {fileID: 0} - - target: {fileID: 7613463722260290446, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_RootOrder - value: 5 - objectReference: {fileID: 0} - - target: {fileID: 8403003260084890620, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8468582706564339464, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} - propertyPath: m_RootOrder - value: 7 - objectReference: {fileID: 0} - target: {fileID: 8468582706564339464, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} propertyPath: m_LocalPosition.x value: -0.842 @@ -14097,6 +14591,18 @@ PrefabInstance: value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 8372833645970865070, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} + insertIndex: -1 + addedObject: {fileID: 1824793669} + - targetCorrespondingSourceObject: {fileID: 8549021144382954156, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} + - targetCorrespondingSourceObject: {fileID: 4355450153607930378, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} m_SourcePrefab: {fileID: 100100000, guid: a31291e7cd07cc34f9b29ec2a6ab7224, type: 3} --- !u!1 &1824793668 stripped GameObject: @@ -14149,6 +14655,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1848983996} + serializedVersion: 2 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} @@ -14157,7 +14664,6 @@ Transform: - {fileID: 460835581} - {fileID: 243610129} m_Father: {fileID: 1203713056} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1852224430 GameObject: @@ -14182,6 +14688,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1852224430} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0.19388044, y: 0.43222737, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -14194,19 +14701,15 @@ Transform: - {fileID: 1089489031} - {fileID: 1404428861} m_Father: {fileID: 1203713056} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1866417129 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1203713056} m_Modifications: - - target: {fileID: 2415827607033482817, guid: 5be1d1dda43e3ed40b18f4eb09e144fa, type: 3} - propertyPath: m_RootOrder - value: 9 - objectReference: {fileID: 0} - target: {fileID: 2415827607033482817, guid: 5be1d1dda43e3ed40b18f4eb09e144fa, type: 3} propertyPath: m_LocalPosition.x value: -0.689 @@ -14252,6 +14755,12 @@ PrefabInstance: value: Pen objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 3084243108605482235, guid: 5be1d1dda43e3ed40b18f4eb09e144fa, type: 3} + insertIndex: -1 + addedObject: {fileID: 1866417131} m_SourcePrefab: {fileID: 100100000, guid: 5be1d1dda43e3ed40b18f4eb09e144fa, type: 3} --- !u!1 &1866417130 stripped GameObject: @@ -14304,6 +14813,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1913468801} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -0.056, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -14319,13 +14829,13 @@ Transform: - {fileID: 2059242324} - {fileID: 828245820} m_Father: {fileID: 1203713056} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1923515644 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 2131597836} m_Modifications: - target: {fileID: 100000, guid: 1b72c1e6302ca7542afd89257b6367aa, type: 3} @@ -14401,6 +14911,36 @@ PrefabInstance: value: 0.00005 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 100000, guid: 1b72c1e6302ca7542afd89257b6367aa, type: 3} + insertIndex: -1 + addedObject: {fileID: 1724991368} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 1b72c1e6302ca7542afd89257b6367aa, type: 3} + insertIndex: -1 + addedObject: {fileID: 1724991371} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 1b72c1e6302ca7542afd89257b6367aa, type: 3} + insertIndex: -1 + addedObject: {fileID: 1724991366} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 1b72c1e6302ca7542afd89257b6367aa, type: 3} + insertIndex: -1 + addedObject: {fileID: 1724991367} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 1b72c1e6302ca7542afd89257b6367aa, type: 3} + insertIndex: -1 + addedObject: {fileID: 1724991369} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 1b72c1e6302ca7542afd89257b6367aa, type: 3} + insertIndex: -1 + addedObject: {fileID: 1724991370} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 1b72c1e6302ca7542afd89257b6367aa, type: 3} + insertIndex: -1 + addedObject: {fileID: 1923515646} + - targetCorrespondingSourceObject: {fileID: 100002, guid: 1b72c1e6302ca7542afd89257b6367aa, type: 3} + insertIndex: -1 + addedObject: {fileID: 1470489463} + - targetCorrespondingSourceObject: {fileID: 100002, guid: 1b72c1e6302ca7542afd89257b6367aa, type: 3} + insertIndex: -1 + addedObject: {fileID: 1470489464} m_SourcePrefab: {fileID: 100100000, guid: 1b72c1e6302ca7542afd89257b6367aa, type: 3} --- !u!4 &1923515645 stripped Transform: @@ -14433,8 +14973,17 @@ CapsuleCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4654093213557177396} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 + serializedVersion: 2 m_Radius: 10.918639 m_Height: 26.952131 m_Direction: 1 @@ -14640,6 +15189,9 @@ MonoBehaviour: k__BackingField: 1 allowSelectByVoice: 1 speechRecognitionKeyword: select + k__BackingField: + m_PersistentCalls: + m_Calls: [] k__BackingField: 1 k__BackingField: 0 k__BackingField: @@ -14684,6 +15236,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -14787,8 +15340,17 @@ CapsuleCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1959878136} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 + serializedVersion: 2 m_Radius: 0.03228122 m_Height: 0.15444481 m_Direction: 1 @@ -14798,6 +15360,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1404428861} m_Modifications: - target: {fileID: 2712310172936119071, guid: 698c502bf492aec45af6a7b04219d34b, type: 3} @@ -15029,6 +15592,12 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 4639606898651727610, guid: 698c502bf492aec45af6a7b04219d34b, type: 3} + insertIndex: -1 + addedObject: {fileID: 380279361} m_SourcePrefab: {fileID: 100100000, guid: 698c502bf492aec45af6a7b04219d34b, type: 3} --- !u!4 &1996988710 stripped Transform: @@ -15066,7 +15635,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 5174432} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -15134,20 +15702,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 @@ -15185,6 +15756,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -15234,13 +15808,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2026715036} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -0.005910009, y: 0.0011000037, z: -0.0055999756} m_LocalScale: {x: 0.0058, y: 0.0058, z: 0.0058} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 840468517} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!212 &2026715038 SpriteRenderer: @@ -15259,6 +15833,9 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -15325,7 +15902,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1913468802} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -15397,20 +15973,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 @@ -15448,6 +16027,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -15504,7 +16086,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1913468802} - m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -15572,20 +16153,23 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 + m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 @@ -15623,6 +16207,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -15658,6 +16245,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1089489031} m_Modifications: - target: {fileID: 3738767603136113390, guid: c9b1a111fa131cc48b6c4daedd47efe3, type: 3} @@ -15961,6 +16549,33 @@ PrefabInstance: value: "\uF342" objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 4042998139673148539, guid: c9b1a111fa131cc48b6c4daedd47efe3, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} + - targetCorrespondingSourceObject: {fileID: 7464071161666581383, guid: c9b1a111fa131cc48b6c4daedd47efe3, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} + - targetCorrespondingSourceObject: {fileID: 4042998139036849028, guid: c9b1a111fa131cc48b6c4daedd47efe3, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} + - targetCorrespondingSourceObject: {fileID: 7464071162302864504, guid: c9b1a111fa131cc48b6c4daedd47efe3, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} + - targetCorrespondingSourceObject: {fileID: 4042998140648635396, guid: c9b1a111fa131cc48b6c4daedd47efe3, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} + - targetCorrespondingSourceObject: {fileID: 7464071160695288824, guid: c9b1a111fa131cc48b6c4daedd47efe3, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} + - targetCorrespondingSourceObject: {fileID: 4042998139867488095, guid: c9b1a111fa131cc48b6c4daedd47efe3, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} + - targetCorrespondingSourceObject: {fileID: 7464071161472225443, guid: c9b1a111fa131cc48b6c4daedd47efe3, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} m_SourcePrefab: {fileID: 100100000, guid: c9b1a111fa131cc48b6c4daedd47efe3, type: 3} --- !u!4 &2096650620 stripped Transform: @@ -15996,13 +16611,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2123527392} + serializedVersion: 2 m_LocalRotation: {x: 0.21668836, y: -0.8997533, z: -0.21801639, w: 0.30977273} m_LocalPosition: {x: 0.4087, y: -0.3559, z: -0.0792} m_LocalScale: {x: 1.1901672, y: 1.1901666, z: 1.190167} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 150862479} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 24.512, y: -96.121, z: -22.092} --- !u!23 &2123527394 MeshRenderer: @@ -16021,6 +16636,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -16065,6 +16683,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 3526612193736648505, guid: c4ec596b04ef53f4581688939092e813, type: 2} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -16351,6 +16970,9 @@ MonoBehaviour: k__BackingField: 1 allowSelectByVoice: 1 speechRecognitionKeyword: select + k__BackingField: + m_PersistentCalls: + m_Calls: [] k__BackingField: 1 k__BackingField: 0 k__BackingField: @@ -16378,9 +17000,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2123527392} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 0.112064324, y: 0.13389134, z: 0.11896934} m_Center: {x: -0.004010728, y: 0.012695584, z: -0.00058461254} --- !u!114 &2123527399 @@ -16410,8 +17040,17 @@ CapsuleCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2126969654} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 + serializedVersion: 2 m_Radius: 0.032281216 m_Height: 0.15444481 m_Direction: 1 @@ -16421,6 +17060,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 782737666} m_Modifications: - target: {fileID: 2783974331088143781, guid: c25d8f2d22117bd40ad824684551fbde, type: 3} @@ -16524,6 +17164,18 @@ PrefabInstance: value: UnityEngine.Object, UnityEngine objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 5092507606858315802, guid: c25d8f2d22117bd40ad824684551fbde, type: 3} + insertIndex: -1 + addedObject: {fileID: 2128020772} + - targetCorrespondingSourceObject: {fileID: 5092507606405556712, guid: c25d8f2d22117bd40ad824684551fbde, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} + - targetCorrespondingSourceObject: {fileID: 1811028555225687572, guid: c25d8f2d22117bd40ad824684551fbde, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} m_SourcePrefab: {fileID: 100100000, guid: c25d8f2d22117bd40ad824684551fbde, type: 3} --- !u!4 &2128020770 stripped Transform: @@ -16572,6 +17224,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2131597835} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -0, y: -0.042, z: 0.202} m_LocalScale: {x: 1, y: 1, z: 1} @@ -16581,7 +17234,6 @@ Transform: - {fileID: 1923515645} - {fileID: 956891493} m_Father: {fileID: 1708103290} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4326491061339189 stripped Transform: @@ -16593,6 +17245,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1404428861} m_Modifications: - target: {fileID: 38784627857828811, guid: 8f6fb5f907837b645a884d67d7b70393, type: 3} @@ -17652,6 +18305,9 @@ PrefabInstance: value: UnityEngine.Object, UnityEngine objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 8f6fb5f907837b645a884d67d7b70393, type: 3} --- !u!82 &364946991195464073 stripped AudioSource: @@ -17663,6 +18319,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1913468802} m_Modifications: - target: {fileID: 251265377, guid: 0d3b2fd2079cd514d8dbce654f929320, type: 3} @@ -17685,10 +18342,6 @@ PrefabInstance: propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 1214529608091387485, guid: 0d3b2fd2079cd514d8dbce654f929320, type: 3} - propertyPath: m_RootOrder - value: 3 - objectReference: {fileID: 0} - target: {fileID: 1214529608091387485, guid: 0d3b2fd2079cd514d8dbce654f929320, type: 3} propertyPath: m_LocalPosition.x value: -0.191 @@ -17734,12 +18387,16 @@ PrefabInstance: value: CoffeeBoundsControl objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 0d3b2fd2079cd514d8dbce654f929320, type: 3} --- !u!1001 &2578649064215403923 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1710053220} m_Modifications: - target: {fileID: 238993406236766840, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} @@ -19292,7 +19949,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 6776978392589374212, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} propertyPath: m_Size.y - value: 47.01599 + value: 47.04004 objectReference: {fileID: 0} - target: {fileID: 6776978392589374212, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} propertyPath: m_Enabled @@ -19300,7 +19957,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 6776978392589374212, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} propertyPath: m_Center.y - value: 4.2420044 + value: 4.2299805 objectReference: {fileID: 0} - target: {fileID: 6776978392769446706, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} propertyPath: Spatialize @@ -19344,7 +20001,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 6776978392769446710, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} propertyPath: m_Size.y - value: 47.01599 + value: 47.04004 objectReference: {fileID: 0} - target: {fileID: 6776978392769446710, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} propertyPath: m_Enabled @@ -19352,7 +20009,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 6776978392769446710, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} propertyPath: m_Center.y - value: 4.2420044 + value: 4.2299805 objectReference: {fileID: 0} - target: {fileID: 6776978392855206650, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} propertyPath: m_Size.x @@ -19360,7 +20017,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 6776978392855206650, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} propertyPath: m_Size.y - value: 128 + value: 127.97656 objectReference: {fileID: 0} - target: {fileID: 6776978392855206650, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} propertyPath: m_Enabled @@ -19372,7 +20029,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 6776978392855206650, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} propertyPath: m_Center.y - value: 0 + value: -0.01171875 objectReference: {fileID: 0} - target: {fileID: 6776978392855206654, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} propertyPath: Spatialize @@ -19448,7 +20105,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 6776978393435224398, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} propertyPath: m_Size.y - value: 47.01599 + value: 47.04004 objectReference: {fileID: 0} - target: {fileID: 6776978393435224398, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} propertyPath: m_Enabled @@ -19460,7 +20117,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 6776978393435224398, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} propertyPath: m_Center.y - value: 4.2420044 + value: 4.2299805 objectReference: {fileID: 0} - target: {fileID: 6790485856255541986, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} propertyPath: m_Size.x @@ -19843,12 +20500,16 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 262b70b02609c85439cdaf12c4713ec3, type: 3} --- !u!1001 &4654093213557177394 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 150862479} m_Modifications: - target: {fileID: -3910990755373119420, guid: aa94f0fa662d8bd4e84361cc9f0d065a, type: 3} @@ -19912,6 +20573,21 @@ PrefabInstance: value: MRTK_Logo objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 8771091787928289351, guid: aa94f0fa662d8bd4e84361cc9f0d065a, type: 3} + insertIndex: -1 + addedObject: {fileID: 1929573049} + - targetCorrespondingSourceObject: {fileID: 8771091787928289351, guid: aa94f0fa662d8bd4e84361cc9f0d065a, type: 3} + insertIndex: -1 + addedObject: {fileID: 1929573052} + - targetCorrespondingSourceObject: {fileID: 8771091787928289351, guid: aa94f0fa662d8bd4e84361cc9f0d065a, type: 3} + insertIndex: -1 + addedObject: {fileID: 1929573050} + - targetCorrespondingSourceObject: {fileID: 8771091787928289351, guid: aa94f0fa662d8bd4e84361cc9f0d065a, type: 3} + insertIndex: -1 + addedObject: {fileID: 1929573051} m_SourcePrefab: {fileID: -4161369568681901532, guid: aa94f0fa662d8bd4e84361cc9f0d065a, type: 3} --- !u!4 &4654093213557177395 stripped Transform: @@ -19928,12 +20604,9 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 5905304275062509466, guid: df4899a7e84d2794a9428337bba8a253, type: 3} - propertyPath: m_RootOrder - value: 4 - objectReference: {fileID: 0} - target: {fileID: 5905304275062509466, guid: df4899a7e84d2794a9428337bba8a253, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 @@ -19951,54 +20624,18 @@ PrefabInstance: value: EventSystem objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: df4899a7e84d2794a9428337bba8a253, type: 3} --- !u!1001 &7372669236719069155 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 1667384560894720772, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} - propertyPath: isToggled.onExited.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 0} - - target: {fileID: 1667384560894720772, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} - propertyPath: isToggled.onExited.m_PersistentCalls.m_Calls.Array.data[1].m_Target - value: - objectReference: {fileID: 0} - - target: {fileID: 1667384560894720772, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} - propertyPath: isToggled.onEntered.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 0} - - target: {fileID: 1667384560894720772, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} - propertyPath: isToggled.onEntered.m_PersistentCalls.m_Calls.Array.data[1].m_Target - value: - objectReference: {fileID: 0} - - target: {fileID: 1667384561245672091, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} - propertyPath: isToggled.onExited.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 0} - - target: {fileID: 1667384561245672091, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} - propertyPath: isToggled.onExited.m_PersistentCalls.m_Calls.Array.data[1].m_Target - value: - objectReference: {fileID: 0} - - target: {fileID: 1667384561245672091, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} - propertyPath: isToggled.onEntered.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 0} - - target: {fileID: 1667384561245672091, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} - propertyPath: isToggled.onEntered.m_PersistentCalls.m_Calls.Array.data[1].m_Target - value: - objectReference: {fileID: 0} - - target: {fileID: 1667384562270007169, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} - propertyPath: isToggled.onExited.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 1346790086} - - target: {fileID: 1667384562270007169, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} - propertyPath: isToggled.onEntered.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 1346790086} - target: {fileID: 2082148069247382453, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} propertyPath: Spatialize value: 1 @@ -20051,10 +20688,6 @@ PrefabInstance: propertyPath: m_Name value: HandMenu objectReference: {fileID: 0} - - target: {fileID: 7372669237086358568, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} - propertyPath: m_RootOrder - value: 1 - objectReference: {fileID: 0} - target: {fileID: 7372669237086358568, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} propertyPath: m_LocalPosition.x value: 0 @@ -20108,4 +20741,18 @@ PrefabInstance: value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 8bfb4497dda968b469f9c0c4a22374d1, type: 3} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 705507995} + - {fileID: 7372669236719069155} + - {fileID: 530525190} + - {fileID: 1241509141} + - {fileID: 5905304273903168958} + - {fileID: 1203713056} + - {fileID: 771189643} From f3bef9e69821acc580691dff19fef2294aff2bab Mon Sep 17 00:00:00 2001 From: Kurtis Date: Tue, 19 May 2026 18:25:20 -0700 Subject: [PATCH 05/18] Add org.mixedrealitytoolkit.theming --- .../AssemblyInfo.cs | 15 ++ .../AssemblyInfo.cs.meta | 11 ++ org.mixedrealitytoolkit.theming/Binders.meta | 8 + .../Binders/BaseThemeBinder.cs | 52 +++++ .../Binders/BaseThemeBinder.cs.meta | 11 ++ .../Binders/FontIconSetBinder.cs | 45 +++++ .../Binders/FontIconSetBinder.cs.meta | 11 ++ .../Binders/GraphicColorBinder.cs | 20 ++ .../Binders/GraphicColorBinder.cs.meta | 11 ++ .../Binders/GraphicMaterialBinder.cs | 20 ++ .../Binders/GraphicMaterialBinder.cs.meta | 11 ++ .../Binders/IBinder.cs | 13 ++ .../Binders/IBinder.cs.meta | 11 ++ .../Binders/ImageSpriteBinder.cs | 20 ++ .../Binders/ImageSpriteBinder.cs.meta | 11 ++ .../Binders/LayoutGroupPaddingBinder.cs | 20 ++ .../Binders/LayoutGroupPaddingBinder.cs.meta | 11 ++ .../Binders/RendererMaterialBinder.cs | 19 ++ .../Binders/RendererMaterialBinder.cs.meta | 11 ++ .../Binders/RoundedRectMask2DRadiusBinder.cs | 20 ++ .../RoundedRectMask2DRadiusBinder.cs.meta | 11 ++ .../Binders/SpriteRendererColorBinder.cs | 19 ++ .../Binders/SpriteRendererColorBinder.cs.meta | 11 ++ .../Binders/SpriteRendererSpriteBinder.cs | 19 ++ .../SpriteRendererSpriteBinder.cs.meta | 11 ++ .../StateVisualizerEffectColorBinder.cs | 82 ++++++++ .../StateVisualizerEffectColorBinder.cs.meta | 11 ++ .../Binders/TMP_TextFontAssetBinder.cs | 19 ++ .../Binders/TMP_TextFontAssetBinder.cs.meta | 11 ++ .../Binders/TransformLocalScaleBinder.cs | 19 ++ .../Binders/TransformLocalScaleBinder.cs.meta | 11 ++ org.mixedrealitytoolkit.theming/CHANGELOG.md | 14 ++ .../CHANGELOG.md.meta | 7 + .../Images/ColorThemeItemData.png | Bin 0 -> 6474 bytes .../Images/TextColorMapping.png | Bin 0 -> 4980 bytes .../Documentation~/Images/ThemeBinding.png | Bin 0 -> 87358 bytes .../Images/ThemeBindingThemeSource.png | Bin 0 -> 10348 bytes .../Documentation~/Images/ThemeDataSource.png | Bin 0 -> 16717 bytes org.mixedrealitytoolkit.theming/Editor.meta | 8 + .../Editor/AssemblyInfo.cs | 12 ++ .../Editor/AssemblyInfo.cs.meta | 11 ++ .../Editor/BaseThemeBinderDrawer.cs | 143 ++++++++++++++ .../Editor/BaseThemeBinderDrawer.cs.meta | 11 ++ .../Editor/FontIconSetMapEditor.cs | 185 ++++++++++++++++++ .../Editor/FontIconSetMapEditor.cs.meta | 11 ++ .../Editor/MRTK.Theming.Editor.asmdef | 23 +++ .../Editor/MRTK.Theming.Editor.asmdef.meta | 7 + .../Editor/ThemeDataSourceEditor.cs | 36 ++++ .../Editor/ThemeDataSourceEditor.cs.meta | 11 ++ .../Editor/ThemeEditor.cs | 131 +++++++++++++ .../Editor/ThemeEditor.cs.meta | 11 ++ org.mixedrealitytoolkit.theming/ItemData.meta | 8 + .../ItemData/BaseThemeItemData.cs | 13 ++ .../ItemData/BaseThemeItemData.cs.meta | 11 ++ .../ItemData/ColorThemeItemData.cs | 10 + .../ItemData/ColorThemeItemData.cs.meta | 11 ++ .../ItemData/FloatItemData.cs | 8 + .../ItemData/FloatItemData.cs.meta | 11 ++ .../ItemData/FontIconSetItemData.cs | 8 + .../ItemData/FontIconSetItemData.cs.meta | 11 ++ .../ItemData/MaterialThemeItemData.cs | 10 + .../ItemData/MaterialThemeItemData.cs.meta | 11 ++ .../ItemData/RectOffsetItemData.cs | 9 + .../ItemData/RectOffsetItemData.cs.meta | 11 ++ .../ItemData/SpriteThemeItemData.cs | 10 + .../ItemData/SpriteThemeItemData.cs.meta | 11 ++ .../ItemData/TMP_FontAssetThemeItemData.cs | 10 + .../TMP_FontAssetThemeItemData.cs.meta | 11 ++ .../ItemData/Vector3ItemData.cs | 10 + .../ItemData/Vector3ItemData.cs.meta | 11 ++ org.mixedrealitytoolkit.theming/LICENSE.md | 28 +++ .../LICENSE.md.meta | 7 + org.mixedrealitytoolkit.theming/README.md | 139 +++++++++++++ .../README.md.meta | 7 + org.mixedrealitytoolkit.theming/Theming.meta | 8 + .../Theming/FontIconSetMap.cs | 18 ++ .../Theming/FontIconSetMap.cs.meta | 11 ++ .../Theming/MRTK_Theming_FontIconSetMap.asset | 18 ++ .../MRTK_Theming_FontIconSetMap.asset.meta | 8 + .../Theming/Theme Data Source.asset | 101 ++++++++++ .../Theming/Theme Data Source.asset.meta | 8 + .../Theming/Theme.cs | 76 +++++++ .../Theming/Theme.cs.meta | 11 ++ .../Theming/ThemeBinding.cs | 51 +++++ .../Theming/ThemeBinding.cs.meta | 11 ++ .../Theming/ThemeDataSource.cs | 69 +++++++ .../Theming/ThemeDataSource.cs.meta | 11 ++ .../Theming/ThemeDefinition.cs | 26 +++ .../Theming/ThemeDefinition.cs.meta | 11 ++ 89 files changed, 2010 insertions(+) create mode 100644 org.mixedrealitytoolkit.theming/AssemblyInfo.cs create mode 100644 org.mixedrealitytoolkit.theming/AssemblyInfo.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Binders.meta create mode 100644 org.mixedrealitytoolkit.theming/Binders/BaseThemeBinder.cs create mode 100644 org.mixedrealitytoolkit.theming/Binders/BaseThemeBinder.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Binders/FontIconSetBinder.cs create mode 100644 org.mixedrealitytoolkit.theming/Binders/FontIconSetBinder.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Binders/GraphicColorBinder.cs create mode 100644 org.mixedrealitytoolkit.theming/Binders/GraphicColorBinder.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Binders/GraphicMaterialBinder.cs create mode 100644 org.mixedrealitytoolkit.theming/Binders/GraphicMaterialBinder.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Binders/IBinder.cs create mode 100644 org.mixedrealitytoolkit.theming/Binders/IBinder.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Binders/ImageSpriteBinder.cs create mode 100644 org.mixedrealitytoolkit.theming/Binders/ImageSpriteBinder.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Binders/LayoutGroupPaddingBinder.cs create mode 100644 org.mixedrealitytoolkit.theming/Binders/LayoutGroupPaddingBinder.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Binders/RendererMaterialBinder.cs create mode 100644 org.mixedrealitytoolkit.theming/Binders/RendererMaterialBinder.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Binders/RoundedRectMask2DRadiusBinder.cs create mode 100644 org.mixedrealitytoolkit.theming/Binders/RoundedRectMask2DRadiusBinder.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Binders/SpriteRendererColorBinder.cs create mode 100644 org.mixedrealitytoolkit.theming/Binders/SpriteRendererColorBinder.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Binders/SpriteRendererSpriteBinder.cs create mode 100644 org.mixedrealitytoolkit.theming/Binders/SpriteRendererSpriteBinder.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Binders/StateVisualizerEffectColorBinder.cs create mode 100644 org.mixedrealitytoolkit.theming/Binders/StateVisualizerEffectColorBinder.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Binders/TMP_TextFontAssetBinder.cs create mode 100644 org.mixedrealitytoolkit.theming/Binders/TMP_TextFontAssetBinder.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Binders/TransformLocalScaleBinder.cs create mode 100644 org.mixedrealitytoolkit.theming/Binders/TransformLocalScaleBinder.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/CHANGELOG.md create mode 100644 org.mixedrealitytoolkit.theming/CHANGELOG.md.meta create mode 100644 org.mixedrealitytoolkit.theming/Documentation~/Images/ColorThemeItemData.png create mode 100644 org.mixedrealitytoolkit.theming/Documentation~/Images/TextColorMapping.png create mode 100644 org.mixedrealitytoolkit.theming/Documentation~/Images/ThemeBinding.png create mode 100644 org.mixedrealitytoolkit.theming/Documentation~/Images/ThemeBindingThemeSource.png create mode 100644 org.mixedrealitytoolkit.theming/Documentation~/Images/ThemeDataSource.png create mode 100644 org.mixedrealitytoolkit.theming/Editor.meta create mode 100644 org.mixedrealitytoolkit.theming/Editor/AssemblyInfo.cs create mode 100644 org.mixedrealitytoolkit.theming/Editor/AssemblyInfo.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs create mode 100644 org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs create mode 100644 org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Editor/MRTK.Theming.Editor.asmdef create mode 100644 org.mixedrealitytoolkit.theming/Editor/MRTK.Theming.Editor.asmdef.meta create mode 100644 org.mixedrealitytoolkit.theming/Editor/ThemeDataSourceEditor.cs create mode 100644 org.mixedrealitytoolkit.theming/Editor/ThemeDataSourceEditor.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs create mode 100644 org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/ItemData.meta create mode 100644 org.mixedrealitytoolkit.theming/ItemData/BaseThemeItemData.cs create mode 100644 org.mixedrealitytoolkit.theming/ItemData/BaseThemeItemData.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/ItemData/ColorThemeItemData.cs create mode 100644 org.mixedrealitytoolkit.theming/ItemData/ColorThemeItemData.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/ItemData/FloatItemData.cs create mode 100644 org.mixedrealitytoolkit.theming/ItemData/FloatItemData.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/ItemData/FontIconSetItemData.cs create mode 100644 org.mixedrealitytoolkit.theming/ItemData/FontIconSetItemData.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/ItemData/MaterialThemeItemData.cs create mode 100644 org.mixedrealitytoolkit.theming/ItemData/MaterialThemeItemData.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/ItemData/RectOffsetItemData.cs create mode 100644 org.mixedrealitytoolkit.theming/ItemData/RectOffsetItemData.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/ItemData/SpriteThemeItemData.cs create mode 100644 org.mixedrealitytoolkit.theming/ItemData/SpriteThemeItemData.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/ItemData/TMP_FontAssetThemeItemData.cs create mode 100644 org.mixedrealitytoolkit.theming/ItemData/TMP_FontAssetThemeItemData.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/ItemData/Vector3ItemData.cs create mode 100644 org.mixedrealitytoolkit.theming/ItemData/Vector3ItemData.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/LICENSE.md create mode 100644 org.mixedrealitytoolkit.theming/LICENSE.md.meta create mode 100644 org.mixedrealitytoolkit.theming/README.md create mode 100644 org.mixedrealitytoolkit.theming/README.md.meta create mode 100644 org.mixedrealitytoolkit.theming/Theming.meta create mode 100644 org.mixedrealitytoolkit.theming/Theming/FontIconSetMap.cs create mode 100644 org.mixedrealitytoolkit.theming/Theming/FontIconSetMap.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_FontIconSetMap.asset create mode 100644 org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_FontIconSetMap.asset.meta create mode 100644 org.mixedrealitytoolkit.theming/Theming/Theme Data Source.asset create mode 100644 org.mixedrealitytoolkit.theming/Theming/Theme Data Source.asset.meta create mode 100644 org.mixedrealitytoolkit.theming/Theming/Theme.cs create mode 100644 org.mixedrealitytoolkit.theming/Theming/Theme.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Theming/ThemeBinding.cs create mode 100644 org.mixedrealitytoolkit.theming/Theming/ThemeBinding.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Theming/ThemeDataSource.cs create mode 100644 org.mixedrealitytoolkit.theming/Theming/ThemeDataSource.cs.meta create mode 100644 org.mixedrealitytoolkit.theming/Theming/ThemeDefinition.cs create mode 100644 org.mixedrealitytoolkit.theming/Theming/ThemeDefinition.cs.meta diff --git a/org.mixedrealitytoolkit.theming/AssemblyInfo.cs b/org.mixedrealitytoolkit.theming/AssemblyInfo.cs new file mode 100644 index 000000000..218ffdc9c --- /dev/null +++ b/org.mixedrealitytoolkit.theming/AssemblyInfo.cs @@ -0,0 +1,15 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using System.Reflection; +using System.Runtime.CompilerServices; + +[assembly: AssemblyProduct("Mixed Reality Toolkit UX Theming")] +[assembly: AssemblyCopyright("Copyright (c) Mixed Reality Toolkit Contributors")] + +[assembly: InternalsVisibleTo("MixedReality.Toolkit.Theming.Editor")] + +// The AssemblyVersion attribute is checked-in and is recommended not to be changed often. +// https://docs.microsoft.com/troubleshoot/visualstudio/general/assembly-version-assembly-file-version +// AssemblyFileVersion and AssemblyInformationalVersion are added by pack-upm.ps1 to match the current MRTK build version. +[assembly: AssemblyVersion("1.0.0.0")] diff --git a/org.mixedrealitytoolkit.theming/AssemblyInfo.cs.meta b/org.mixedrealitytoolkit.theming/AssemblyInfo.cs.meta new file mode 100644 index 000000000..892060a27 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd8f4169cd8a4df48ac8feff44ed8702 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Binders.meta b/org.mixedrealitytoolkit.theming/Binders.meta new file mode 100644 index 000000000..775fee110 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ce334cc034bd7c7499ad53ab02d99c26 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Binders/BaseThemeBinder.cs b/org.mixedrealitytoolkit.theming/Binders/BaseThemeBinder.cs new file mode 100644 index 000000000..f36683211 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/BaseThemeBinder.cs @@ -0,0 +1,52 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEngine; +using UnityEngine.UIElements; + +namespace MixedReality.Toolkit.Theming +{ + public abstract class BaseThemeBinder : IBinder + { + [field: SerializeField] + protected K Target { get; private set; } + + [field: SerializeField, HideInInspector] + public string ThemeDefinitionItemName { get; private set; } + + protected abstract void Apply(BaseThemeItemData themeItemData); + + protected void OnThemeChanged(ChangeEvent changeEvent) + { + if (changeEvent.newValue == null) + { + Debug.LogWarning($"{GetType().Name}: Received a theme change event with a null theme. Skipping Apply."); + return; + } + + if (!changeEvent.newValue.TryGetItemData(ThemeDefinitionItemName, out BaseThemeItemData value)) + { + Debug.LogWarning($"{GetType().Name}: No item named '{ThemeDefinitionItemName}' of type '{typeof(T).Name}' found in theme '{changeEvent.newValue.name}'."); + return; + } + + Apply(value); + } + + void IBinder.Subscribe(ThemeDataSource themeDataSource) + { + if (themeDataSource != null) + { + themeDataSource.AddListener(OnThemeChanged); + } + } + + void IBinder.Unsubscribe(ThemeDataSource themeDataSource) + { + if (themeDataSource != null) + { + themeDataSource.RemoveListener(OnThemeChanged); + } + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Binders/BaseThemeBinder.cs.meta b/org.mixedrealitytoolkit.theming/Binders/BaseThemeBinder.cs.meta new file mode 100644 index 000000000..7f3c41224 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/BaseThemeBinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9459ae0bfe34be24e96f3f79e384d90b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Binders/FontIconSetBinder.cs b/org.mixedrealitytoolkit.theming/Binders/FontIconSetBinder.cs new file mode 100644 index 000000000..3755e8553 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/FontIconSetBinder.cs @@ -0,0 +1,45 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using MixedReality.Toolkit.UX; +using System; +using TMPro; +using UnityEngine; + +namespace MixedReality.Toolkit.Theming +{ + [Serializable] + public class FontIconSetBinder : BaseThemeBinder + { + protected override void Apply(BaseThemeItemData themeItemData) + { + if (Target != null && Target.TextMeshProComponent != null && Target.IconSelector != null && themeItemData.Value.FontIconSet.GlyphIconsByName.ContainsKey(Target.IconSelector.CurrentIconName)) + { + // Clear the text to prevent missing character warnings when changing the font + Target.TextMeshProComponent.text = string.Empty; + Target.TextMeshProComponent.font = themeItemData.Value.Font; + Target.IconSelector.SetFontIconSet(themeItemData.Value.FontIconSet, true); + } + } + + [Serializable] + public class FontIconSetBinding + { + [field: SerializeField] + public FontIconSelector IconSelector { get; private set; } + + [field: SerializeField] + public TMP_Text TextMeshProComponent { get; private set; } + } + + [Serializable] + public class FontIconSetData + { + [field: SerializeField] + public TMP_FontAsset Font { get; private set; } + + [field: SerializeField] + public FontIconSet FontIconSet { get; private set; } + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Binders/FontIconSetBinder.cs.meta b/org.mixedrealitytoolkit.theming/Binders/FontIconSetBinder.cs.meta new file mode 100644 index 000000000..3d285ca7b --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/FontIconSetBinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 79ad0c9f980cdb14c8e62716499c5da7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Binders/GraphicColorBinder.cs b/org.mixedrealitytoolkit.theming/Binders/GraphicColorBinder.cs new file mode 100644 index 000000000..50a290082 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/GraphicColorBinder.cs @@ -0,0 +1,20 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEngine; +using UnityEngine.UI; + +namespace MixedReality.Toolkit.Theming +{ + [System.Serializable] + public class GraphicColorBinder : BaseThemeBinder + { + protected override void Apply(BaseThemeItemData themeItemData) + { + if (Target != null) + { + Target.color = themeItemData.Value; + } + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Binders/GraphicColorBinder.cs.meta b/org.mixedrealitytoolkit.theming/Binders/GraphicColorBinder.cs.meta new file mode 100644 index 000000000..578241ef3 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/GraphicColorBinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e6dbd7ced329ef4f9b540ea7d4d5bee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Binders/GraphicMaterialBinder.cs b/org.mixedrealitytoolkit.theming/Binders/GraphicMaterialBinder.cs new file mode 100644 index 000000000..66b77fc41 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/GraphicMaterialBinder.cs @@ -0,0 +1,20 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEngine; +using UnityEngine.UI; + +namespace MixedReality.Toolkit.Theming +{ + [System.Serializable] + public class GraphicMaterialBinder : BaseThemeBinder + { + protected override void Apply(BaseThemeItemData themeItemData) + { + if (Target != null) + { + Target.material = themeItemData.Value; + } + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Binders/GraphicMaterialBinder.cs.meta b/org.mixedrealitytoolkit.theming/Binders/GraphicMaterialBinder.cs.meta new file mode 100644 index 000000000..d3394e15c --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/GraphicMaterialBinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 232b8661c9be4d446a7ce038f48b0760 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Binders/IBinder.cs b/org.mixedrealitytoolkit.theming/Binders/IBinder.cs new file mode 100644 index 000000000..dd64ad902 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/IBinder.cs @@ -0,0 +1,13 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +namespace MixedReality.Toolkit.Theming +{ + public interface IBinder + { + void Subscribe(ThemeDataSource themeDataSource); + void Unsubscribe(ThemeDataSource themeDataSource); + + string ThemeDefinitionItemName { get; } + } +} diff --git a/org.mixedrealitytoolkit.theming/Binders/IBinder.cs.meta b/org.mixedrealitytoolkit.theming/Binders/IBinder.cs.meta new file mode 100644 index 000000000..1f52cf3b6 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/IBinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3ea076276620fc4888c26f7bc68d7f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Binders/ImageSpriteBinder.cs b/org.mixedrealitytoolkit.theming/Binders/ImageSpriteBinder.cs new file mode 100644 index 000000000..a02e8cd81 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/ImageSpriteBinder.cs @@ -0,0 +1,20 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEngine; +using UnityEngine.UI; + +namespace MixedReality.Toolkit.Theming +{ + [System.Serializable] + public class ImageSpriteBinder : BaseThemeBinder + { + protected override void Apply(BaseThemeItemData themeItemData) + { + if (Target != null) + { + Target.sprite = themeItemData.Value; + } + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Binders/ImageSpriteBinder.cs.meta b/org.mixedrealitytoolkit.theming/Binders/ImageSpriteBinder.cs.meta new file mode 100644 index 000000000..9ff947f22 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/ImageSpriteBinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6ab68b63843d0f24eb3bc1a4349ed89e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Binders/LayoutGroupPaddingBinder.cs b/org.mixedrealitytoolkit.theming/Binders/LayoutGroupPaddingBinder.cs new file mode 100644 index 000000000..c2c5ce61a --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/LayoutGroupPaddingBinder.cs @@ -0,0 +1,20 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEngine; +using UnityEngine.UI; + +namespace MixedReality.Toolkit.Theming +{ + [System.Serializable] + public class LayoutGroupPaddingBinder : BaseThemeBinder + { + protected override void Apply(BaseThemeItemData themeItemData) + { + if (Target != null) + { + Target.padding = themeItemData.Value; + } + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Binders/LayoutGroupPaddingBinder.cs.meta b/org.mixedrealitytoolkit.theming/Binders/LayoutGroupPaddingBinder.cs.meta new file mode 100644 index 000000000..4709da232 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/LayoutGroupPaddingBinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9df85a72df4780545bb4ae373fbe6a0b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Binders/RendererMaterialBinder.cs b/org.mixedrealitytoolkit.theming/Binders/RendererMaterialBinder.cs new file mode 100644 index 000000000..0850970bc --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/RendererMaterialBinder.cs @@ -0,0 +1,19 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEngine; + +namespace MixedReality.Toolkit.Theming +{ + [System.Serializable] + public class RendererMaterialBinder : BaseThemeBinder + { + protected override void Apply(BaseThemeItemData themeItemData) + { + if (Target != null) + { + Target.material = themeItemData.Value; + } + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Binders/RendererMaterialBinder.cs.meta b/org.mixedrealitytoolkit.theming/Binders/RendererMaterialBinder.cs.meta new file mode 100644 index 000000000..2ee87530f --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/RendererMaterialBinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ad27e47d68f7044c948fe7bd2c2106a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Binders/RoundedRectMask2DRadiusBinder.cs b/org.mixedrealitytoolkit.theming/Binders/RoundedRectMask2DRadiusBinder.cs new file mode 100644 index 000000000..21388e483 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/RoundedRectMask2DRadiusBinder.cs @@ -0,0 +1,20 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using Microsoft.MixedReality.GraphicsTools; +using UnityEngine; + +namespace MixedReality.Toolkit.Theming +{ + [System.Serializable] + public class RoundedRectMask2DRadiusBinder : BaseThemeBinder + { + protected override void Apply(BaseThemeItemData themeItemData) + { + if (Target != null) + { + Target.Radii = Vector3.one * themeItemData.Value; + } + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Binders/RoundedRectMask2DRadiusBinder.cs.meta b/org.mixedrealitytoolkit.theming/Binders/RoundedRectMask2DRadiusBinder.cs.meta new file mode 100644 index 000000000..0d78a3975 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/RoundedRectMask2DRadiusBinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d52126062c5a4442bd6800e89d1f6cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Binders/SpriteRendererColorBinder.cs b/org.mixedrealitytoolkit.theming/Binders/SpriteRendererColorBinder.cs new file mode 100644 index 000000000..24b1ccc51 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/SpriteRendererColorBinder.cs @@ -0,0 +1,19 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEngine; + +namespace MixedReality.Toolkit.Theming +{ + [System.Serializable] + public class SpriteRendererColorBinder : BaseThemeBinder + { + protected override void Apply(BaseThemeItemData themeItemData) + { + if (Target != null) + { + Target.color = themeItemData.Value; + } + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Binders/SpriteRendererColorBinder.cs.meta b/org.mixedrealitytoolkit.theming/Binders/SpriteRendererColorBinder.cs.meta new file mode 100644 index 000000000..650c562f1 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/SpriteRendererColorBinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0818ebc31f7842047a74482722d60201 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Binders/SpriteRendererSpriteBinder.cs b/org.mixedrealitytoolkit.theming/Binders/SpriteRendererSpriteBinder.cs new file mode 100644 index 000000000..bfbe24a0c --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/SpriteRendererSpriteBinder.cs @@ -0,0 +1,19 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEngine; + +namespace MixedReality.Toolkit.Theming +{ + [System.Serializable] + public class SpriteRendererSpriteBinder : BaseThemeBinder + { + protected override void Apply(BaseThemeItemData themeItemData) + { + if (Target != null) + { + Target.sprite = themeItemData.Value; + } + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Binders/SpriteRendererSpriteBinder.cs.meta b/org.mixedrealitytoolkit.theming/Binders/SpriteRendererSpriteBinder.cs.meta new file mode 100644 index 000000000..30b1f1142 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/SpriteRendererSpriteBinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8d37b91b434ef87458ad6c3515863101 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Binders/StateVisualizerEffectColorBinder.cs b/org.mixedrealitytoolkit.theming/Binders/StateVisualizerEffectColorBinder.cs new file mode 100644 index 000000000..f62fc6d3b --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/StateVisualizerEffectColorBinder.cs @@ -0,0 +1,82 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using MixedReality.Toolkit.UX; +using UnityEngine; + +namespace MixedReality.Toolkit.Theming +{ + /// + /// Binds a theme item to a single tint effect on a + /// component. + /// + /// + /// Add one of these binders per state (or per state+effect combination) to a + /// component. Each binder reads a Color from the + /// active theme and routes it to the matching tint effect via + /// . + /// + /// Set to one of the built-in state names (Disabled, + /// PassiveHover, ActiveHover, Select, Toggle) or any + /// custom state you have added. + /// + /// Leave unassigned to repaint every ITintEffect in that + /// state. Assign it to the specific Graphic or SpriteRenderer that appears + /// in the tintables list of the effect you want to target — this is rename-proof and + /// breaks visibly (missing reference) rather than silently if the object is deleted. + /// This is the preferred approach when one state contains multiple tint effects that need + /// different colors (e.g. a background tint and an icon tint). + /// + [System.Serializable] + public class StateVisualizerEffectColorBinder : BaseThemeBinder + { + [SerializeField] + [Tooltip("The name of the StateVisualizer state to target (e.g. 'PassiveHover', 'Toggle').")] + private string stateName = "PassiveHover"; + + /// The name of the state whose tint effect(s) will be updated. + public string StateName + { + get => stateName; + set => stateName = value; + } + + [SerializeField] + [Tooltip("The specific Graphic or SpriteRenderer that appears in the tintables list of " + + "the effect to target. Leave unassigned to update every tint effect in the state.")] + private UnityEngine.Object tintTarget; + + /// + /// The specific tintable component used to identify which ITintEffect to update, + /// or to update all tint effects in the state. + /// + /// + /// Assign the same Graphic or SpriteRenderer that is listed in the + /// effect's Tintables array in the Inspector. This is rename-proof and breaks + /// visibly (missing reference) rather than silently if the object is deleted. + /// + public UnityEngine.Object TintTarget + { + get => tintTarget; + set => tintTarget = value; + } + + /// + protected override void Apply(BaseThemeItemData themeItemData) + { + if (Target == null) + { + Debug.LogWarning($"{nameof(StateVisualizerEffectColorBinder)}: Target {nameof(StateVisualizer)} is null. Skipping Apply."); + return; + } + + if (string.IsNullOrEmpty(stateName)) + { + Debug.LogWarning($"{nameof(StateVisualizerEffectColorBinder)}: {nameof(StateName)} is not set. Skipping Apply."); + return; + } + + Target.TrySetStateTintColor(stateName, tintTarget, themeItemData.Value); + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Binders/StateVisualizerEffectColorBinder.cs.meta b/org.mixedrealitytoolkit.theming/Binders/StateVisualizerEffectColorBinder.cs.meta new file mode 100644 index 000000000..9ad8ea4c0 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/StateVisualizerEffectColorBinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e0a31f0a06206334cb52572615736c37 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Binders/TMP_TextFontAssetBinder.cs b/org.mixedrealitytoolkit.theming/Binders/TMP_TextFontAssetBinder.cs new file mode 100644 index 000000000..dd86cb292 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/TMP_TextFontAssetBinder.cs @@ -0,0 +1,19 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using TMPro; + +namespace MixedReality.Toolkit.Theming +{ + [System.Serializable] + public class TMP_TextFontAssetBinder : BaseThemeBinder + { + protected override void Apply(BaseThemeItemData themeItemData) + { + if (Target != null) + { + Target.font = themeItemData.Value; + } + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Binders/TMP_TextFontAssetBinder.cs.meta b/org.mixedrealitytoolkit.theming/Binders/TMP_TextFontAssetBinder.cs.meta new file mode 100644 index 000000000..a7a17d7b4 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/TMP_TextFontAssetBinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 90624ee5453f0504db2aede9ac58879d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Binders/TransformLocalScaleBinder.cs b/org.mixedrealitytoolkit.theming/Binders/TransformLocalScaleBinder.cs new file mode 100644 index 000000000..0baf4905a --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/TransformLocalScaleBinder.cs @@ -0,0 +1,19 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEngine; + +namespace MixedReality.Toolkit.Theming +{ + [System.Serializable] + public class TransformLocalScaleBinder : BaseThemeBinder + { + protected override void Apply(BaseThemeItemData themeItemData) + { + if (Target != null) + { + Target.localScale = themeItemData.Value; + } + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Binders/TransformLocalScaleBinder.cs.meta b/org.mixedrealitytoolkit.theming/Binders/TransformLocalScaleBinder.cs.meta new file mode 100644 index 000000000..be7c49e40 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Binders/TransformLocalScaleBinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c6ba7974c6d770a4baa18e9a72c9429d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/CHANGELOG.md b/org.mixedrealitytoolkit.theming/CHANGELOG.md new file mode 100644 index 000000000..ae04a133c --- /dev/null +++ b/org.mixedrealitytoolkit.theming/CHANGELOG.md @@ -0,0 +1,14 @@ +# Changelog + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). + +## Unreleased + +### Added + +* Added the new MRTK UX Theming package (`org.mixedrealitytoolkit.theming`) for runtime theme switching across MRTK canvas UI. [PR #1119](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1119) + * Added `ThemeDataSource`, `Theme`, `ThemeDefinition`, and `ThemeBinding` as the core theming data model and binding workflow. + * Added serializable theme item data types for colors, floats, font icon sets, materials, rect offsets, sprites, TextMeshPro font assets, and Vector3 values. + * Added built-in binders for common Unity and MRTK UI properties, including graphic color/material, renderer material, image and sprite renderer sprite/color, layout group padding, rounded rectangle mask radius, transform local scale, TMP font assets, font icon sets, and StateVisualizer tint colors. + * Added editor tooling for creating and configuring themes, theme data sources, theme bindings, and font icon set maps in the Unity Inspector. + * Added package documentation, screenshots, license, assembly definitions, sample theme assets, and a default MRTK font icon set map. diff --git a/org.mixedrealitytoolkit.theming/CHANGELOG.md.meta b/org.mixedrealitytoolkit.theming/CHANGELOG.md.meta new file mode 100644 index 000000000..e02f6f3e8 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8e60cbf77fc6f5e4ab9e709f98ff0ef9 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Documentation~/Images/ColorThemeItemData.png b/org.mixedrealitytoolkit.theming/Documentation~/Images/ColorThemeItemData.png new file mode 100644 index 0000000000000000000000000000000000000000..b23476cc2fd4f6034f218d974229ab2e080490b4 GIT binary patch literal 6474 zcma)BX*iT^-&d*ZYsHjpvL*Yt!(_V+S#Hwej)ai0l(CFKcEyN<8Qf^Hr6S2L`&wxX zV=39U5gKG)#x|DsoSx@+-w*F`Jje54w(~l!^E$8d`v127JiTsa$jNq=jfshg)7VJ= zCKJ<9B=~O5ass?7ubz7ZK8|2+8X}mAx`gJy4`vtLtGY}~r8xFIhvVQktCx`#hKY&m zGvjrn)iV#AE=V!f*Ztf7?qbHA`6fSq`FOQ`Z6v&yIn>)rldnQlcTvVCq&Qcqxbbq#6 zVAnMM_pMumLhGs*4MAHkGBh5(khiWJti1m{mrz@Kxz6M6-At=W6agNx`@uGBpvX2i zFORe^R4#p1whIr{Gre*p(y9#EChMM)lS3V?!8m`yvfdcWy_&YLxwTC3RP`K3<-dQw zDC-{kjJ9adUJMa8C|uTy-@=P2$Gr+CGbA*uPy%f1)yWKCsmE$ogphKv+gl@n9o{mWx@ zE?bdnPdLvl&>whsRML&=Uxtp?2l(0CJN~opy=9tpl?NeB&GW^=0?NAkpd=)(pdfaa z@0t3zRVEzcyis#q>dZ<2>;(Oj>Z9)b?Cg&shu_~`s|tDi+-s&wc%&<+K9H6_<}!Rn z@h+^>VC8){|J_uH#0X9f(KB_HwX%kX#1nczFRyQ@BS(KtW)%?T8{#E#WHlKjx3U9?`f0l8Q6k&C$b;K#mI=eKnuhiYLtF6uW!ZAM9)!I_WR)e40p+xe+xsjMKk=2k% zmDmC0lptJahK@!4qDrRt!MG4AwMl@y8ZsTS2CsuTO3ce*{k8bYM3{6TZ5rrFtW}A< zE+UN|)?^mF$;StSVtIrO5&g$*HwM?hy{DtCsyxPI-T7eO2s}y#@j?&|DFh32_$2xk zLJI4ua_l769}y=w%hoycbg!^L^#ggXo#YU-pL#FqDTzcx|Ff}7p=`{3Z{1iLvj&Gx zLNoa+r%ElrxjYD#1P2Kum<-DUG5GHX#s#70R8hC_*C}0C7l*aH*VnBt`t$hb-DOOq zg;PV2{7W9XxxN4Slbreu#v!V$S=}{%;o`+I?z7w#N6H@l>XljF+rfMv9CW=~@9*HZ zFvz=b&V}}?kGk^X^G8)M31UOD)`pa8O6ZZ=^A#$0?u417$QiROX48VZGPT?+3h$go znMCPDaanz1uh4aOFI=2zN49y4Ry(kF`JN6U$2>uW49^`m9;2PGQ^2oVqlJwlk-Lc*ji|< zz}QlX2Q_s06T?|CqB0}bGN*(49CO6`9 zensJL-MV$folyd_nLcFWePnqs6f;y<$s+)3$90GmO8%HHf>i_P>65$Xh0&K zT+e`Gqy|-;I|S*0^ZoKF0c+EF+Oo3bz4dM#zafFLzxRI^m45e2Yqp_@j}ccxLmQKo z@5)5&MnlH_m9F{M?+Ef?;G>H{u`nCp!Wj(eLFy!WUnWsQH$?F=;NpU zHI;A-bAUtD3mY7@h4{x=r4M9JpFYisIMKl=3usl^EZu0^&Vkfb>pRcaj_kGB z0e9#ZN|0@}s`knjE-xzT+KeNMALd3F?;M4w5 z+zQVtX)!22WA8~yzfq5f<`Dm{2Hw1RxI9i>tfHuTHqcUd5Yb#~T^h^JaoW42z0DC% z*5B|p`is&S(s@!e*j{^o!+d?nB@2LJR!lT(uXL{OeQI2BXniukNn&_xnXNtvfQmY9{(2L?Bs}$rs*Ld^WUKBeP=GErlvNi*ahVE zDjJP0xyk~CMPdtt#gGq|MwJ2BV}3~>C$EZ0Aa(XuB6fCWvgARLIs=`&0Uxg_+@lTH zIe!d4{!tYaW>j(sP}t|ojr1-CN;L!4TBfI`ndx-K`VU1D@D<0fD4=`PwV&i0wl<^` zd28oi^Yfi?=hRTSkCIN&!VY%cf*OmJQB-6gH@CKSxDwtrQtoo?4`PYKXOs@HI$%B5 zswp(2S4v-sg_VEq{c+FHYUO-s^1@b5eejO=$P6G9>h|i?nSrH0H}J)t zjXP4=zXg+Cl%AUEa#2?H>eZ`p?id;xYSPc$HswFs5L7j`)va@=`G6l0-DQC2=fc00 zG0%OTn8;V|Nzt~RVIRu7@p_?;4tC9*AiH1g(mm{iEy&6Faw4c55KhI%%%uL=Z?6mA z#0hKkS0)3~!Ff(q-_bj9t=t>ob7_uksEQKmwnS<21YX5Cbf0Ef9zyrStW4;R5S1~@ z<63o^4xgCKEiGMA!*+hAUeGh}@^*w*UkRN3nr-nJ>W5*1tYefs!_5VBr<(*_P$#-`4%(_=uOEG8z#UZ>1KD9SKi=;<({TJ^#H1w+LheE}&Y zWn^TCA=96eT+xzEz~wPRH2`(@DiZMME91SrNG?(B^haSP=Fvq`wotu-rSS$g4@#r( z$E_CuE=Al{Wz`=5ZT{jGQs+Tolx&;3i$eBk0}NRxX0gf>{WObR@Fl1NILS#M7n=oO zf96#;%wl5$E_4{87n7u}{$)+N?Q90QM;#uOzYc|6sYO`azU``Lw5P32;-v(H$_zDy z9p-5#8v^02a+E@iW*^(C*;1X?bLz)#`Zbi!hR`9t5fCp&V ze#sbvDYq3-^GNSxQ(6rp#zOoiLxZrWb!w-dEm7veg_0zCg4TfL?^~nKz0F!+4i4os zCRi`qxR!J@wb*M*9&ue9u5ex+Z}=8Cn)t?JqWSTS3~s``cus0g2q*)Kd=c$n*O^z} z;(b;f&-S~l>0mA;=nYV@9W-%Afn{mNY9zsG{=~<#4^6ivxi`p)-{{cEj!%kAqetR* z_9qbrz|P#R_b<(0?!=w^Bij!7!Y7hrJAqB$tj(Krb@V5*%(o&();({*a2>3DIGqDm z1)FMnr?!e#2Qx_>LBP$Wi>=DDRhR`O(O8+|8@@D#TK)UNFsOc7Kn6qNT}1(J>Zk3j zeCA%%^V0jM4-5`{dphYFDwsiS!_4cAEJE3j&SQDbheW@#ndP(F_m>5$fAa=tOs-|| zUDXB!K*NrB$TPAagE9aa!(xBy4A1$`i~*S+VL=IZXZmvhLB{K9N){0v3&HV(Q{lvy zx)BSQI{`7^tbZTMF$D~1#AfN8s0>QOCi?wuat_a{PW)Z&i zAs25;LyEK-%`AIPkKmeIp!!<|h!iQkCmhP;R7KqFGUQV&*2rByDO4+^s2h+#_&m$E zAqjq%2q*D1&fiEKCpKAXr1||)??BYDVz(=2MNYV(WNC)Frb@~tu-PLsw#0#XHvhZQ z^iLR+3}C8n+Nmnz#o{Z~(uW}+5{wuYT+O(AX;6nDWDAb35blWR4l%&?|IScZ@~oQk zML^9?j9oueXFnsSx?v2uG5{R;|XX-)TTA6sS}v)h<~q(UmCfyvvWh3+nmbW+(zpAIX!)Q=MIqE5PO&} zvgeHa9b`M1y!g2lgTc6Kg|W1MSbc<4Ghl)FFw}cwlDS!rY)e?pd%c_v$H-}NGywag zt{uX9YXhCTyjHI#yUo<0mbU9!OWme%mao^C}@f707#tdx2yGe z*RTQ)-Y)5EL8ESTqa*M&WuIAxKyv5=hPU(av6FlrIp=Z6p(2}_d*uO3m7<9^@7#G{ zmT}o>#BXWzJ|M1+FV6%DS5_KF1%)D7j*6JxwY7D}DgFw9YWOWYuK|K%E8yy4Eh#DK z*ED#t@&^&wB(o0rN}P#V>DdCZ>6f;FL8!X*7r5GrJPD<5y3?Ee+JpUq`;py)s>>09 z3X_7k?u0<*_(Af#ES97Cc=IhKGBctm1|GmOJ$ntGsqxU`Z)$Qa za9%?%uTD(A(G`owEdrlxrZCaY>{i)bXj+uc+LEp`C^d!Q^9gCIN3S_h;1DmjFBPo3 z(h5kHzd+zj4rmhD4qdNB4Z+s8C}Gy$Ug}V)R9w0SRqaSOX?i3c#dv;?3V61OB$7nz zFSIUvDHbL7omkrQ^{ajPuuv6AG+h52!XSl}cepX6jv)u{3JWV*j}zP_o`ecbA&2oH_S>(rYwn z4p%G=kbp!GpFU1%{+g{8>+ATxJOPEO`&nHiC& zooOx+ik9R5uuew{lIwe@Wj@FsgVzqW3tEE+>gZSQ;?+r!UQW=-mdMy;0ZjAFtJ8+a z{QUe^Fp35;eEHSCY(BTB_6LH{0M|P#$12)s`q-R3Fqk_%!KfQvXj#`H)l2)sr9UzPL(2BP#v-==!W5(6y&s%S65i5wO zjO)Hkz}Lud%89qxFoXJB_Q<xIUwlNth64IvUs84=$KU>9>keTXJI8!;FZ30zP_& zjeQ@0jfF|`AB9`eSx#Bb^|nTGu(UIKhigh7JDN>d0+oU+Dl6+bar3CQ<#sxUt2h%q zy!Dz}O`IN{*pqOjs7pAV$J}YQCGF}3y(ji!GND>xoAuth&F;FE%lc8v^@_+~#i@M~ zGND43L>jJE7A~%Hnrj!r2w6wBf?f@Z+7=ZuF}V7rbMY*l3tQD?gIX)^famE-1bwntfkK!mbwKugSJ$mnQ6fUjq zkz5k{?py>EXclXmU1@Gz=v?G%Myddc>66x=C?P&Icz@>o% zVO|*V&sx$!DK1)syueLQzNq)4y3}@)z<)y77y%y9kMsCv!V0zO2YMkwd}V*IvO*pw zU8Xi)ml{OBatK(N_^2vKM-Yu$3r*~|!m^E13bYUgN>b5f@*Yvufk&10$C`)}%xzDx zC??3I@Upr-P8Y&*txoMRJ%VM9rVi&sc zSyNHkaE=X9{9&C?s*oi>Z=GqOVA-`48lzo7g)jD`Zjt>MPl{`4 zQnr^0fC#8R`V`M7uTWT*;Nv9gFlIfEkN9kFgh7e(66-un^u$wfr84a!2_qbfys(J@ z2j+)%c`VH+(Hr9827a-Y!-CKDr;s20;79oK#)4JB^TKj$cfsJo#$qaZDQA?u7FmwK zbkD6tL|@0@(bj9e`*>+0H!CFMJ1(t)7NTLu$ln?CUU??9BvI(xYBY z%3Spya8k>Y;Yr`NT}hKI>2pbF8-kNQaXG>Z>auz{OsjJ4S~KV3v5^>@Fh!b3JAQh* zzPZ>jIILiMa}PG+wM}36yl8mP$4Op&+5&8dbbC=T&#UY^stE#MoSyL9l!0KuqgpUH_=A&3i|#Nq3YEBkLr)& zspps6Qb0@C_@*mpD`7SltQh@Sd+W=KF?&O=i`@$Mh|Ql=%ezP>(I?q5a4#cC$03YWk%rJwph zVo|WIJyoG`R~iZY4E4w7s9cZ&7seYj@+lQ=sY5_DYeM&H8Eq+sa?(I=tYYN+JaPWR z{qL`Qe_wom&aX#!l~9kv+r=L~^eVVGIT1i}&G5j^8D8jj>lP{l8!7RROUHAE@_TaP$cbT9_hAV}c|ymTYIE?MBASEKGc(qZsbudw zyXb0sLL><0CbLs6B|LA|*1R<+ZfnzRH$s9U7na8ASTW7jr`ywEDS(hzpe<>}-cb7Z bp5l+xZ^);C9f{!o4<_R)X8J`4`|$q(7q)y3 literal 0 HcmV?d00001 diff --git a/org.mixedrealitytoolkit.theming/Documentation~/Images/TextColorMapping.png b/org.mixedrealitytoolkit.theming/Documentation~/Images/TextColorMapping.png new file mode 100644 index 0000000000000000000000000000000000000000..ae75d59d926ada45cf8af8c1a388323b5a972547 GIT binary patch literal 4980 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 literal 0 HcmV?d00001 diff --git a/org.mixedrealitytoolkit.theming/Documentation~/Images/ThemeBinding.png b/org.mixedrealitytoolkit.theming/Documentation~/Images/ThemeBinding.png new file mode 100644 index 0000000000000000000000000000000000000000..2573a235239154fbb86dc25fcc99c94dfc45e557 GIT binary patch literal 87358 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½JIPL;)z_1&o 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 Y@$5QpIW&J(DlU!smG(k1y)w0JR)uF) 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 literal 0 HcmV?d00001 diff --git a/org.mixedrealitytoolkit.theming/Documentation~/Images/ThemeBindingThemeSource.png b/org.mixedrealitytoolkit.theming/Documentation~/Images/ThemeBindingThemeSource.png new file mode 100644 index 0000000000000000000000000000000000000000..6e1024e768aaa0fca124f71a5aadd7f174652761 GIT binary patch literal 10348 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, true)] + public class BaseThemeBinderDrawer : PropertyDrawer + { + // Cached SerializedObject for the ThemeDataSource asset. + // PropertyDrawer is instantiated per-type, not per-property, so multiple + // binders may reference different data source assets — we track the last seen + // asset and rebuild the cache only when it changes. + private SerializedObject cachedDataSourceSerializedObject = null; + private int cachedDataSourceInstanceID = 0; + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + label.text = label.text.Replace("Element", "Binder"); + + SerializedProperty themeDataSourceProperty = FindThemeDataSourceProperty(property); + + List names = null; + SerializedProperty themeDefinitionItemName = null; + + if (property.managedReferenceValue != null && themeDataSourceProperty != null && themeDataSourceProperty.objectReferenceValue != null) + { + themeDefinitionItemName = property.FindPropertyRelative(InspectorUIUtility.GetBackingField("ThemeDefinitionItemName")); + + // Rebuild the cached SerializedObject only when the referenced asset changes. + int instanceID = themeDataSourceProperty.objectReferenceValue.GetInstanceID(); + if (instanceID != cachedDataSourceInstanceID) + { + cachedDataSourceSerializedObject?.Dispose(); + cachedDataSourceSerializedObject = new SerializedObject(themeDataSourceProperty.objectReferenceValue); + cachedDataSourceInstanceID = instanceID; + } + cachedDataSourceSerializedObject.Update(); + + SerializedProperty themeDefinitionProperty = cachedDataSourceSerializedObject.FindProperty("themeDefinition"); + names = ParseThemeItems(themeDefinitionProperty.boxedValue as ThemeDefinition, (dynamic)property.managedReferenceValue); + } + + label = EditorGUI.BeginProperty(position, label, property); + + // Draw the foldout and all child properties within the allocated rect. + Rect propertyRect = position; + if (names != null) + { + // Reserve the last line for the Bound Theme Item popup when expanded. + propertyRect.height -= property.isExpanded ? EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing : 0; + } + EditorGUI.PropertyField(propertyRect, property, label, true); + + // Draw the Bound Theme Item popup using the Rect API, within the allocated position. + if (names != null && property.isExpanded) + { + int selected = names.IndexOf(themeDefinitionItemName.stringValue); + + // Child fields are indented 15px from position.x. Unity's label/control + // split is at position.x + labelWidth, so the label width is (labelWidth - 15f) + // and the control starts at that same absolute split point. + const float indentWidth = 15f; + float rowY = position.y + propertyRect.height + EditorGUIUtility.standardVerticalSpacing; + float splitX = position.x + EditorGUIUtility.labelWidth; + float rightEdge = position.x + position.width; + Rect labelRect = new Rect(position.x + indentWidth, rowY, EditorGUIUtility.labelWidth - indentWidth, EditorGUIUtility.singleLineHeight); + Rect controlRect = new Rect(splitX, rowY, rightEdge - splitX, EditorGUIUtility.singleLineHeight); + + using (var check = new EditorGUI.ChangeCheckScope()) + { + EditorGUI.LabelField(labelRect, "Bound Theme Item"); + selected = EditorGUI.Popup(controlRect, selected, System.Array.ConvertAll(names.ToArray(), n => new GUIContent(n))); + if (check.changed) + { + themeDefinitionItemName.stringValue = names[selected]; + } + } + } + else if (themeDefinitionItemName != null && names == null) + { + themeDefinitionItemName.stringValue = null; + } + + EditorGUI.EndProperty(); + + property.serializedObject.ApplyModifiedProperties(); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + float height = EditorGUI.GetPropertyHeight(property); + + // Add a line for the Bound Theme Item popup when the foldout is expanded and a data source is available. + if (property.isExpanded && property.managedReferenceValue != null) + { + SerializedProperty themeDataSourceProperty = FindThemeDataSourceProperty(property); + if (themeDataSourceProperty != null && themeDataSourceProperty.objectReferenceValue != null) + { + height += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + } + } + + return height; + } + + private static SerializedProperty FindThemeDataSourceProperty(SerializedProperty property) + { + string path = property.propertyPath; + string parentPath = path.Substring(0, path.LastIndexOf(path.Contains(".Array.data[") ? ".Array.data[" : ".")); + SerializedProperty parentProperty = property.serializedObject.FindProperty(parentPath); + return parentProperty?.serializedObject.FindProperty("themeDataSource"); + } + + private List ParseThemeItems(ThemeDefinition themeDefinition, BaseThemeBinder _) + { + if (themeDefinition == null || themeDefinition.ThemeDefinitionItems == null) + { + return null; + } + + List matchingItemNames = new(); + + foreach (ThemeDefinition.ThemeDefinitionItem item in themeDefinition.ThemeDefinitionItems) + { + if (!string.IsNullOrWhiteSpace(item.Name) + && item.DataType?.Type != null + && item.DataType.Type.BaseType != null + && item.DataType.Type.BaseType.GenericTypeArguments.Length > 0 + && item.DataType.Type.BaseType.GenericTypeArguments[0].IsAssignableFrom(typeof(T))) + { + matchingItemNames.Add(item.Name); + } + } + + return matchingItemNames; + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs.meta b/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs.meta new file mode 100644 index 000000000..514c5dfba --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f0f8b840810ac3044aa74e3940c04c18 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs b/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs new file mode 100644 index 000000000..9bd0c8865 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs @@ -0,0 +1,185 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using MixedReality.Toolkit.Editor; +using MixedReality.Toolkit.UX; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace MixedReality.Toolkit.Theming.Editor +{ + [CustomEditor(typeof(FontIconSetMap))] + public class FontIconSetMapEditor : UnityEditor.Editor + { + private SerializedProperty setDefinitionProperty; + private SerializedProperty fontIconSetsProperty; + + private int numColumns = 4; + private bool editToggled = false; + private List foldoutStates = new(); + + public void OnEnable() + { + setDefinitionProperty = serializedObject.FindProperty("setDefinition"); + fontIconSetsProperty = serializedObject.FindProperty("fontIconSets"); + // Ensure we have enough values to track all assigned icon sets + for (int i = foldoutStates.Count; i < fontIconSetsProperty.arraySize; i++) + { + foldoutStates.Add(false); + } + } + + public override void OnInspectorGUI() + { + EditorGUILayout.PropertyField(setDefinitionProperty); + EditorGUILayout.PropertyField(fontIconSetsProperty); + editToggled = EditorGUILayout.Toggle("Edit Names", editToggled); + EditorGUILayout.LabelField(string.Empty, GUI.skin.horizontalSlider); + + FontIconSetDefinition setDefinition = setDefinitionProperty.objectReferenceValue as FontIconSetDefinition; + const int TileSize = 90; + + List validNames = new List(); + Dictionary> iconMatches = new Dictionary>(); + + for (int i = 0; i < fontIconSetsProperty.arraySize; i++) + { + FontIconSet iconSet = fontIconSetsProperty.GetArrayElementAtIndex(i).objectReferenceValue as FontIconSet; + if (iconSet == null) + { + continue; + } + + List> glyphs = iconSet.GlyphIconsByName.ToList(); + + int column = 0; + + if (editToggled) + { + glyphs.Sort((pair1, pair2) => pair1.Value.CompareTo(pair2.Value)); + + if (foldoutStates.Count <= i) + { + foldoutStates.Add(false); + } + + if (foldoutStates[i] = EditorGUILayout.Foldout(foldoutStates[i], iconSet.name, true)) + { + EditorGUILayout.BeginHorizontal(); + foreach (KeyValuePair kv in glyphs) + { + if (column >= numColumns) + { + column = 0; + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal(); + } + + EditorGUILayout.BeginVertical(GUILayout.Width(TileSize)); + + Rect textureRect = GUILayoutUtility.GetRect(TileSize, TileSize, GUI.skin.box); + EditorGUI.DrawRect(textureRect, new Color(0f, 0f, 0f, 0.1f)); + FontIconSetInspector.EditorDrawTMPGlyph(textureRect, kv.Value, iconSet.IconFontAsset); + + if (setDefinition != null && setDefinition.IconNames != null) + { + validNames.Clear(); + validNames.Add(kv.Key); + foreach (string name in setDefinition.IconNames) + { + if (!iconSet.GlyphIconsByName.Keys.Contains(name)) + { + validNames.Add(name); + } + } + + validNames.Sort(); + string[] validNamesArray = validNames.ToArray(); + + using (var check = new EditorGUI.ChangeCheckScope()) + { + int selected = validNames.IndexOf(kv.Key); + // If the currently selected name isn't in our icon set map names, highlight the popup + Color oldColor = GUI.backgroundColor; + if (!validNames.Contains(kv.Key)) + { + GUI.backgroundColor = Color.yellow; + } + selected = EditorGUILayout.Popup(string.Empty, selected, validNamesArray, GUILayout.MaxWidth(TileSize)); + if (check.changed) + { + iconSet.UpdateIconName(kv.Key, validNamesArray[selected]); + EditorUtility.SetDirty(iconSet); + } + GUI.backgroundColor = oldColor; + } + } + + EditorGUILayout.EndVertical(); + + column++; + } + + EditorGUILayout.EndHorizontal(); + } + } + else + { + glyphs.Sort((pair1, pair2) => pair1.Key.CompareTo(pair2.Key)); + foreach (KeyValuePair kv in glyphs) + { + if (iconMatches.TryGetValue(kv.Key, out List icons)) + { + icons.Add(iconSet); + } + else + { + iconMatches.Add(kv.Key, new List { iconSet }); + } + } + } + } + + if (!editToggled) + { + foreach (KeyValuePair> kv in iconMatches) + { + if (setDefinition != null && setDefinition.IconNames != null) + { + EditorGUILayout.BeginVertical(); + + EditorGUILayout.LabelField(kv.Key, EditorStyles.boldLabel); + + EditorGUILayout.BeginHorizontal(); + + for (int i = 0; i < fontIconSetsProperty.arraySize; i++) + { + FontIconSet iconSet = fontIconSetsProperty.GetArrayElementAtIndex(i).objectReferenceValue as FontIconSet; + Rect iconRect = GUILayoutUtility.GetRect(TileSize, TileSize, GUI.skin.box); + EditorGUI.DrawRect(iconRect, new Color(0f, 0f, 0f, 0.1f)); + + if (kv.Value.Contains(iconSet)) + { + FontIconSetInspector.EditorDrawTMPGlyph(iconRect, iconSet.GlyphIconsByName[kv.Key], iconSet.IconFontAsset); + } + } + + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.EndVertical(); + } + } + } + + if (Event.current.type == EventType.Repaint) + { + float editorWindowWidth = GUILayoutUtility.GetLastRect().width; + numColumns = (int)Mathf.Floor(editorWindowWidth / (TileSize + GUI.skin.button.margin.right)); + } + + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs.meta b/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs.meta new file mode 100644 index 000000000..d9d7cb69e --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df22f8ff1a7c965478e57897bf2b0e1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Editor/MRTK.Theming.Editor.asmdef b/org.mixedrealitytoolkit.theming/Editor/MRTK.Theming.Editor.asmdef new file mode 100644 index 000000000..2a228dfae --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Editor/MRTK.Theming.Editor.asmdef @@ -0,0 +1,23 @@ +{ + "name": "MixedReality.Toolkit.Theming.Editor", + "rootNamespace": "MixedReality.Toolkit.Theming.Editor", + "references": [ + "GUID:56255bd5d851a6243b63cb370cfc40b1", + "GUID:1712c250045dc734ba8993abefec8428", + "GUID:2238d58cada9b6746a548c6bff32c381", + "GUID:9a9367d437335a947a847011f5575869", + "GUID:e76caf03ea6b3df499bbc873e017d102", + "GUID:6055be8ebefd69e48b49212b09b47b2f" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/org.mixedrealitytoolkit.theming/Editor/MRTK.Theming.Editor.asmdef.meta b/org.mixedrealitytoolkit.theming/Editor/MRTK.Theming.Editor.asmdef.meta new file mode 100644 index 000000000..587dcc9ef --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Editor/MRTK.Theming.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 16570cd2fc0ec514cb2f350e689eeb09 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Editor/ThemeDataSourceEditor.cs b/org.mixedrealitytoolkit.theming/Editor/ThemeDataSourceEditor.cs new file mode 100644 index 000000000..69ab3cf4d --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Editor/ThemeDataSourceEditor.cs @@ -0,0 +1,36 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEditor; + +namespace MixedReality.Toolkit.Theming.Editor +{ + [CustomEditor(typeof(ThemeDataSource), true)] + public class ThemeDataSourceEditor : UnityEditor.Editor + { + /// + /// Called by the Unity editor to render custom inspector UI for this component. + /// + public override void OnInspectorGUI() + { + serializedObject.Update(); + + SerializedProperty iterator = serializedObject.GetIterator(); + bool enterChildren = true; + + while (iterator.NextVisible(enterChildren)) + { + enterChildren = false; + + EditorGUILayout.PropertyField(iterator, true); + + if (iterator.name == "activeTheme" && iterator.boxedValue is Theme theme && theme.Definition != serializedObject.targetObject) + { + EditorGUILayout.HelpBox($"Assigned theme's definition ({theme.Definition.name}) does not match this data source's active definition ({serializedObject.targetObject.name}).\nThis will lead to undefined behavior at runtime.", MessageType.Error); + } + } + + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Editor/ThemeDataSourceEditor.cs.meta b/org.mixedrealitytoolkit.theming/Editor/ThemeDataSourceEditor.cs.meta new file mode 100644 index 000000000..b1d0a939e --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Editor/ThemeDataSourceEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0542958f16458042ab14a7595250755 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs b/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs new file mode 100644 index 000000000..4546085b2 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs @@ -0,0 +1,131 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using MixedReality.Toolkit.Editor; +using System; +using UnityEditor; +using UnityEngine; + +namespace MixedReality.Toolkit.Theming.Editor +{ + [CustomEditor(typeof(Theme), true)] + public class ThemeEditor : UnityEditor.Editor + { + private SerializedProperty themeDefinitionProp = null; + private SerializedProperty themeItemsProp = null; + + private SerializedObject themeDefinitionSerializedObject = null; + private UnityEngine.Object cachedThemeDefinitionRef = null; + + private static bool itemsFoldout = false; + + protected void OnEnable() + { + themeDefinitionProp = serializedObject.FindProperty("definition"); + themeItemsProp = serializedObject.FindProperty("themeItems"); + } + + protected void OnDisable() + { + themeDefinitionSerializedObject?.Dispose(); + themeDefinitionSerializedObject = null; + cachedThemeDefinitionRef = null; + } + + /// + /// Called by the Unity editor to render custom inspector UI for this component. + /// + public override void OnInspectorGUI() + { + EditorGUILayout.PropertyField(themeDefinitionProp); + + // Rebuild the cached SerializedObject if the referenced definition asset has changed. + if (themeDefinitionProp.objectReferenceValue != cachedThemeDefinitionRef) + { + themeDefinitionSerializedObject?.Dispose(); + cachedThemeDefinitionRef = themeDefinitionProp.objectReferenceValue; + themeDefinitionSerializedObject = cachedThemeDefinitionRef != null + ? new SerializedObject(cachedThemeDefinitionRef) + : null; + } + themeDefinitionSerializedObject?.Update(); + + SerializedProperty themeDefinitionArrayProp = themeDefinitionSerializedObject != null + ? themeDefinitionSerializedObject + .FindProperty("themeDefinition") + .FindPropertyRelative(InspectorUIUtility.GetBackingField(nameof(ThemeDefinition.ThemeDefinitionItems))) + : null; + + if (themeDefinitionArrayProp != null) + { + itemsFoldout = EditorGUILayout.Foldout(itemsFoldout, "Theme Values", true); + if (itemsFoldout) + { + using (new EditorGUI.IndentLevelScope()) + { + for (int i = 0; i < themeDefinitionArrayProp.arraySize; i++) + { + SerializedProperty themeDefinitionItem = themeDefinitionArrayProp.GetArrayElementAtIndex(i); + string themeDefinitionItemName = themeDefinitionItem.FindPropertyRelative(InspectorUIUtility.GetBackingField(nameof(ThemeDefinition.ThemeDefinitionItem.Name))).stringValue; + + SerializedProperty themeItem = themeItemsProp.arraySize > i ? themeItemsProp.GetArrayElementAtIndex(i) : null; + if (themeItem == null + || themeItem.FindPropertyRelative(InspectorUIUtility.GetBackingField(nameof(Theme.ThemeItem.Name))).stringValue != themeDefinitionItemName) + { + // Search for an existing item with the matching name further in the list, + // so we can move it into position rather than discarding its saved values. + int existingIndex = -1; + for (int j = i + 1; j < themeItemsProp.arraySize; j++) + { + string existingName = themeItemsProp.GetArrayElementAtIndex(j) + .FindPropertyRelative(InspectorUIUtility.GetBackingField(nameof(Theme.ThemeItem.Name))) + .stringValue; + if (existingName == themeDefinitionItemName) + { + existingIndex = j; + break; + } + } + + if (existingIndex >= 0) + { + // Move the found item up to position i, preserving its saved values. + themeItemsProp.MoveArrayElement(existingIndex, i); + } + else + { + // No existing item found — insert a fresh one with default values. + string valueDataType = themeDefinitionItem.FindPropertyRelative(InspectorUIUtility.GetBackingField(nameof(ThemeDefinition.ThemeDefinitionItem.DataType))).FindPropertyRelative("reference").stringValue; + + themeItemsProp.InsertArrayElementAtIndex(i); + themeItem = themeItemsProp.GetArrayElementAtIndex(i); + themeItem.managedReferenceValue = new Theme.ThemeItem(themeDefinitionItemName, Activator.CreateInstance(Type.GetType(valueDataType))); + } + } + + SerializedProperty themeItemProp = themeItemsProp.GetArrayElementAtIndex(i); + SerializedProperty dataProp = themeItemProp.FindPropertyRelative(InspectorUIUtility.GetBackingField(nameof(Theme.ThemeItem.Data))); + SerializedProperty valueProp = dataProp?.FindPropertyRelative(InspectorUIUtility.GetBackingField(nameof(BaseThemeItemData.Value))); + + if (valueProp != null) + { + // Draw just the Value field, labelled with the item name, + // skipping the intermediate "Data" foldout entirely. + EditorGUILayout.PropertyField(valueProp, new GUIContent(themeDefinitionItemName), true); + } + else + { + // Fallback for any item whose Data doesn't follow the + // BaseThemeItemData shape (e.g. a null reference). + EditorGUILayout.PropertyField(themeItemProp, true); + } + } + } + } + themeItemsProp.arraySize = themeDefinitionArrayProp.arraySize; + } + + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs.meta b/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs.meta new file mode 100644 index 000000000..a3731936c --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11a69312bcdb62f4288e591dee20a625 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/ItemData.meta b/org.mixedrealitytoolkit.theming/ItemData.meta new file mode 100644 index 000000000..1907237cd --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2cce0cb63cfc327408973b9b78463a4d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/ItemData/BaseThemeItemData.cs b/org.mixedrealitytoolkit.theming/ItemData/BaseThemeItemData.cs new file mode 100644 index 000000000..f44b34f5d --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/BaseThemeItemData.cs @@ -0,0 +1,13 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEngine; + +namespace MixedReality.Toolkit.Theming +{ + public abstract class BaseThemeItemData + { + [field: SerializeField] + public T Value { get; set; } + } +} diff --git a/org.mixedrealitytoolkit.theming/ItemData/BaseThemeItemData.cs.meta b/org.mixedrealitytoolkit.theming/ItemData/BaseThemeItemData.cs.meta new file mode 100644 index 000000000..bbc78b4a8 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/BaseThemeItemData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61742c507788fd34982b820b87e7da03 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/ItemData/ColorThemeItemData.cs b/org.mixedrealitytoolkit.theming/ItemData/ColorThemeItemData.cs new file mode 100644 index 000000000..4fc289559 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/ColorThemeItemData.cs @@ -0,0 +1,10 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEngine; + +namespace MixedReality.Toolkit.Theming +{ + [System.Serializable] + public class ColorThemeItemData : BaseThemeItemData { } +} diff --git a/org.mixedrealitytoolkit.theming/ItemData/ColorThemeItemData.cs.meta b/org.mixedrealitytoolkit.theming/ItemData/ColorThemeItemData.cs.meta new file mode 100644 index 000000000..29848c306 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/ColorThemeItemData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5759cf6e2c697a644998df43d99988db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/ItemData/FloatItemData.cs b/org.mixedrealitytoolkit.theming/ItemData/FloatItemData.cs new file mode 100644 index 000000000..1f419646f --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/FloatItemData.cs @@ -0,0 +1,8 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +namespace MixedReality.Toolkit.Theming +{ + [System.Serializable] + public class FloatItemData : BaseThemeItemData { } +} diff --git a/org.mixedrealitytoolkit.theming/ItemData/FloatItemData.cs.meta b/org.mixedrealitytoolkit.theming/ItemData/FloatItemData.cs.meta new file mode 100644 index 000000000..fc8e41e07 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/FloatItemData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 80ecb1dc22674da4692bfa9e55c8a6a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/ItemData/FontIconSetItemData.cs b/org.mixedrealitytoolkit.theming/ItemData/FontIconSetItemData.cs new file mode 100644 index 000000000..f83ea8527 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/FontIconSetItemData.cs @@ -0,0 +1,8 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +namespace MixedReality.Toolkit.Theming +{ + [System.Serializable] + public class FontIconSetItemData : BaseThemeItemData { } +} diff --git a/org.mixedrealitytoolkit.theming/ItemData/FontIconSetItemData.cs.meta b/org.mixedrealitytoolkit.theming/ItemData/FontIconSetItemData.cs.meta new file mode 100644 index 000000000..62ee5ec1e --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/FontIconSetItemData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cfb1186fc72d3f24d85b73210d22ed5b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/ItemData/MaterialThemeItemData.cs b/org.mixedrealitytoolkit.theming/ItemData/MaterialThemeItemData.cs new file mode 100644 index 000000000..09961cacb --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/MaterialThemeItemData.cs @@ -0,0 +1,10 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEngine; + +namespace MixedReality.Toolkit.Theming +{ + [System.Serializable] + public class MaterialThemeItemData : BaseThemeItemData { } +} diff --git a/org.mixedrealitytoolkit.theming/ItemData/MaterialThemeItemData.cs.meta b/org.mixedrealitytoolkit.theming/ItemData/MaterialThemeItemData.cs.meta new file mode 100644 index 000000000..ce428ff29 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/MaterialThemeItemData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88c207c8a0256d047bd24a1867ea5825 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/ItemData/RectOffsetItemData.cs b/org.mixedrealitytoolkit.theming/ItemData/RectOffsetItemData.cs new file mode 100644 index 000000000..fa1892902 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/RectOffsetItemData.cs @@ -0,0 +1,9 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEngine; + +namespace MixedReality.Toolkit.Theming +{ + public class RectOffsetItemData : BaseThemeItemData { } +} diff --git a/org.mixedrealitytoolkit.theming/ItemData/RectOffsetItemData.cs.meta b/org.mixedrealitytoolkit.theming/ItemData/RectOffsetItemData.cs.meta new file mode 100644 index 000000000..613e51664 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/RectOffsetItemData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dcca02906a2c1ae449af22395741eb86 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/ItemData/SpriteThemeItemData.cs b/org.mixedrealitytoolkit.theming/ItemData/SpriteThemeItemData.cs new file mode 100644 index 000000000..9cc88ebb3 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/SpriteThemeItemData.cs @@ -0,0 +1,10 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEngine; + +namespace MixedReality.Toolkit.Theming +{ + [System.Serializable] + public class SpriteThemeItemData : BaseThemeItemData { } +} diff --git a/org.mixedrealitytoolkit.theming/ItemData/SpriteThemeItemData.cs.meta b/org.mixedrealitytoolkit.theming/ItemData/SpriteThemeItemData.cs.meta new file mode 100644 index 000000000..0e55b1d6c --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/SpriteThemeItemData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 27d6dc828636c2c4eb5a6b7e6dbfd8c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/ItemData/TMP_FontAssetThemeItemData.cs b/org.mixedrealitytoolkit.theming/ItemData/TMP_FontAssetThemeItemData.cs new file mode 100644 index 000000000..461eb24ee --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/TMP_FontAssetThemeItemData.cs @@ -0,0 +1,10 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using TMPro; + +namespace MixedReality.Toolkit.Theming +{ + [System.Serializable] + public class TMP_FontAssetThemeItemData : BaseThemeItemData { } +} diff --git a/org.mixedrealitytoolkit.theming/ItemData/TMP_FontAssetThemeItemData.cs.meta b/org.mixedrealitytoolkit.theming/ItemData/TMP_FontAssetThemeItemData.cs.meta new file mode 100644 index 000000000..40a28d6dd --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/TMP_FontAssetThemeItemData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 170a5653632decb4f85bd4e064ea893b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/ItemData/Vector3ItemData.cs b/org.mixedrealitytoolkit.theming/ItemData/Vector3ItemData.cs new file mode 100644 index 000000000..dfdaf84ce --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/Vector3ItemData.cs @@ -0,0 +1,10 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEngine; + +namespace MixedReality.Toolkit.Theming +{ + [System.Serializable] + public class Vector3ItemData : BaseThemeItemData { } +} diff --git a/org.mixedrealitytoolkit.theming/ItemData/Vector3ItemData.cs.meta b/org.mixedrealitytoolkit.theming/ItemData/Vector3ItemData.cs.meta new file mode 100644 index 000000000..71e6ebdee --- /dev/null +++ b/org.mixedrealitytoolkit.theming/ItemData/Vector3ItemData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3418308499e06d045a124a4e446540c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/LICENSE.md b/org.mixedrealitytoolkit.theming/LICENSE.md new file mode 100644 index 000000000..426390d68 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/LICENSE.md @@ -0,0 +1,28 @@ +BSD 3-Clause License + +Copyright (c) 2026, Mixed Reality Toolkit Contributors + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/org.mixedrealitytoolkit.theming/LICENSE.md.meta b/org.mixedrealitytoolkit.theming/LICENSE.md.meta new file mode 100644 index 000000000..cac902fe9 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1d1d898d173981e4ca6ff00eedb11863 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/README.md b/org.mixedrealitytoolkit.theming/README.md new file mode 100644 index 000000000..9220707cc --- /dev/null +++ b/org.mixedrealitytoolkit.theming/README.md @@ -0,0 +1,139 @@ +# MRTK UX Theming + +## Overview + +MRTK Theming 3.0 is a lightweight data-binding system that routes named values from a theme asset to components in the scene. Switching the active theme on a `ThemeDataSource` instantly updates every bound component across all scenes and prefabs that reference it. + +The system has three layers: + +| Layer | Asset / Component | Purpose | +|---|---|---| +| **Schema** | `ThemeDataSource` + `ThemeDefinition` | Declares what named items exist and what type each one is | +| **Values** | `Theme` (ScriptableObject) | Provides a concrete value for every item in the definition | +| **Binding** | `ThemeBinding` (MonoBehaviour) + binders | Connects a theme item to a specific component on a GameObject | + +--- + +## Theme data source + +A `ThemeDataSource` ScriptableObject is the single source of truth for which theme is currently active. Create one per logical theme domain (e.g. one for the whole app, or one per scene). + +![ThemeDataSource](./Documentation~/Images/ThemeDataSource.png) + +The `ThemeDataSource` holds: + +- **`activeTheme`** — the currently applied `Theme` asset. +- **`themeDefinition`** — the schema that all compatible themes must conform to. + +To switch themes at runtime, assign a new `Theme` to `themeDataSource.value`. Every `ThemeBinding` component subscribed to that source will immediately receive and apply the new values. + +### Theme definition + +A `ThemeDefinition` is a list of named items, each with a declared data type. It acts as the contract between the `ThemeDataSource` and all `Theme` assets that reference it — every `Theme` must provide a value for every item in the definition. + +Each item has: + +- **Name** — a string key used to match binders to values at runtime (e.g. `"Primary Color"`, `"Backplate Material"`). +- **Data type** — a concrete subclass of `BaseThemeItemData` (e.g. `ColorThemeItemData`, `MaterialThemeItemData`). + +![ColorThemeItemData](./Documentation~/Images/ColorThemeItemData.png) + +--- + +## Theme + +A `Theme` ScriptableObject is assigned to a `ThemeDataSource` and provides a concrete value for every item declared in that source's `ThemeDefinition`. + +![TextColorMapping](./Documentation~/Images/TextColorMapping.png) + +The `Theme` inspector automatically displays one field per definition item, typed correctly. Themes are **complete** — every item in the definition must have a value. This ensures that switching themes always fully overwrites every bound property, with no leftover values from a previous theme. + +--- + +## Theme binding + +The `ThemeBinding` MonoBehaviour connects a `ThemeDataSource` to one or more components on the same GameObject (or its children). Add it to any GameObject that should respond to theme changes. + +![ThemeBindingThemeSource](./Documentation~/Images/ThemeBindingThemeSource.png) + +`ThemeBinding` holds: + +- **`themeDataSource`** — the source to subscribe to. +- **`binders`** — a list of `IBinder` implementations, each connecting one theme item to one component. + +On `OnEnable`, each binder subscribes to the data source and immediately receives the current theme. On `OnDisable`, binders unsubscribe. + +![ThemeBinding](./Documentation~/Images/ThemeBinding.png) + +### Theme binders + +A theme binder connects a named theme item to a specific component property. Each binder has: + +- **Target** — the component to update (e.g. a `Graphic`, `Transform`, `Renderer`). +- **Bound Theme Item** — the name of the item in the `ThemeDefinition` to read from. + +When the active theme changes, the binder looks up its named item in the new theme and calls `Apply` with the value. + +#### Built-in binders + +| Binder | Data type | Target | Sets | +|---|---|---|---| +| `GraphicColorBinder` | `Color` | `Graphic` | `Graphic.color` | +| `GraphicMaterialBinder` | `Material` | `Graphic` | `Graphic.material` | +| `RendererMaterialBinder` | `Material` | `Renderer` | `Renderer.material` | +| `TMP_TextFontAssetBinder` | `TMP_FontAsset` | `TMP_Text` | Font asset | +| `ImageSpriteBinder` | `Sprite` | `Image` | `Image.sprite` | +| `SpriteRendererSpriteBinder` | `Sprite` | `SpriteRenderer` | `SpriteRenderer.sprite` | +| `SpriteRendererColorBinder` | `Color` | `SpriteRenderer` | `SpriteRenderer.color` | +| `TransformLocalScaleBinder` | `Vector3` | `Transform` | `Transform.localScale` | +| `LayoutGroupPaddingBinder` | `RectOffset` | `HorizontalOrVerticalLayoutGroup` | Padding | +| `RoundedRectMask2DRadiusBinder` | `float` | `RoundedRectMask2D` | Corner radius | +| `FontIconSetBinder` | `FontIconSetData` | — | Font + icon set | +| `StateVisualizerEffectColorBinder` | `Color` | `StateVisualizer` | Tint effect color per state | + +--- + +## Extending the system + +### Creating a new theme item data type + +Subclass `BaseThemeItemData` with the desired value type and mark it `[Serializable]`: + +```csharp +[Serializable] +public class FloatItemData : BaseThemeItemData { } +``` + +The new type will automatically appear in the `ThemeDefinition` item type dropdown in the Inspector. + +### Creating a new binder + +Subclass `BaseThemeBinder` where `T` is the value type and `K` is the target component type. Mark it `[Serializable]` and implement `Apply`: + +```csharp +[Serializable] +public class MyCustomBinder : BaseThemeBinder +{ + protected override void Apply(BaseThemeItemData themeItemData) + { + if (Target != null) + { + Target.MyColorProperty = themeItemData.Value; + } + } +} +``` + +The new binder will automatically appear in the `ThemeBinding` binder type dropdown in the Inspector, and the **Bound Theme Item** dropdown will show only the definition items whose data type is compatible with `T`. + +--- + +## How theme switching works at runtime + +1. `themeDataSource.value = newTheme` is called. +2. `ThemeDataSource` fires a `ChangeEvent` to all listeners. +3. Each `ThemeBinding` component's binders receive the event via `OnThemeChanged`. +4. Each binder calls `Theme.TryGetItemData(ThemeDefinitionItemName, ...)` to look up its value. +5. If found, `Apply` is called with the new value. If not found, a warning is logged. + +Because themes are complete (every definition item has a value in every theme), every bound property is always overwritten on a theme switch — there are no partial updates or leftover values from a previous theme. diff --git a/org.mixedrealitytoolkit.theming/README.md.meta b/org.mixedrealitytoolkit.theming/README.md.meta new file mode 100644 index 000000000..ebb7518d9 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 700ac8701616d044d882395e52a8cbee +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Theming.meta b/org.mixedrealitytoolkit.theming/Theming.meta new file mode 100644 index 000000000..7a0608b8b --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 95d454a1ae204534abca1c45248ba018 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Theming/FontIconSetMap.cs b/org.mixedrealitytoolkit.theming/Theming/FontIconSetMap.cs new file mode 100644 index 000000000..4a54a8385 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming/FontIconSetMap.cs @@ -0,0 +1,18 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using MixedReality.Toolkit.UX; +using UnityEngine; + +namespace MixedReality.Toolkit.Theming +{ + [CreateAssetMenu(fileName = "MRTK_Theming_FontIconSetMap_New", menuName = "MRTK/Theming/Font Icon Set Map")] + public class FontIconSetMap : ScriptableObject + { + [SerializeField] + private FontIconSetDefinition setDefinition; + + [SerializeField] + private FontIconSet[] fontIconSets; + } +} diff --git a/org.mixedrealitytoolkit.theming/Theming/FontIconSetMap.cs.meta b/org.mixedrealitytoolkit.theming/Theming/FontIconSetMap.cs.meta new file mode 100644 index 000000000..1d1c72e57 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming/FontIconSetMap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a49c8c479a4ab64fa9d1ac42bf347e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_FontIconSetMap.asset b/org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_FontIconSetMap.asset new file mode 100644 index 000000000..21c5f4828 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_FontIconSetMap.asset @@ -0,0 +1,18 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a49c8c479a4ab64fa9d1ac42bf347e4, type: 3} + m_Name: MRTK_Theming_FontIconSetMap + m_EditorClassIdentifier: + setDefinition: {fileID: 11400000, guid: e63daff880b56ed439a2e852b6e6993a, type: 2} + fontIconSets: + - {fileID: 11400000, guid: b490f983baa13694cb7e5ecc6bd0dae3, type: 2} + - {fileID: 11400000, guid: 98fec9bd136c93c44ba1f6f1bd5f38b5, type: 2} diff --git a/org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_FontIconSetMap.asset.meta b/org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_FontIconSetMap.asset.meta new file mode 100644 index 000000000..477da27e2 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_FontIconSetMap.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 596e56f5586db9b4098cd33d94c7fb72 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Theming/Theme Data Source.asset b/org.mixedrealitytoolkit.theming/Theming/Theme Data Source.asset new file mode 100644 index 000000000..9c19336f8 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming/Theme Data Source.asset @@ -0,0 +1,101 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3f1a7927806b6cc45a1ef33fc3f04465, type: 3} + m_Name: Theme Data Source + m_EditorClassIdentifier: + activeTheme: {fileID: 0} + onThemeChanged: + m_PersistentCalls: + m_Calls: [] + themeDefinition: + k__BackingField: + - k__BackingField: Backplate Material + k__BackingField: + reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Non-Canvas Backplate (8mm) Material + k__BackingField: + reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Non-Canvas Backplate (10mm) Material + k__BackingField: + reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Non-Canvas Backplate (13mm) Material + k__BackingField: + reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Text Font + k__BackingField: + reference: MixedReality.Toolkit.Theming.TMP_FontAssetThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Icon Set + k__BackingField: + reference: MixedReality.Toolkit.Theming.FontIconSetItemData, MixedReality.Toolkit.Theming + - k__BackingField: MRTK Logo + k__BackingField: + reference: MixedReality.Toolkit.Theming.SpriteThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Canvas Backplate Quad Material + k__BackingField: + reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Panel Group Padding + k__BackingField: + reference: MixedReality.Toolkit.Theming.RectOffsetItemData, MixedReality.Toolkit.Theming + - k__BackingField: Button Corner Radius + k__BackingField: + reference: MixedReality.Toolkit.Theming.FloatItemData, MixedReality.Toolkit.Theming + - k__BackingField: Tab Indicator Material + k__BackingField: + reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Horizontal Tab Indicator Scale + k__BackingField: + reference: MixedReality.Toolkit.Theming.Vector3ItemData, MixedReality.Toolkit.Theming + - k__BackingField: Primary Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: On Primary Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Primary Container Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: On Primary Container Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Secondary Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: On Secondary Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Secondary Container Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: On Secondary Container Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Tertiary Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: On Tertiary Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Tertiary Container Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: On Tertiary Container Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Surface Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: On Surface Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Surface Container Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming diff --git a/org.mixedrealitytoolkit.theming/Theming/Theme Data Source.asset.meta b/org.mixedrealitytoolkit.theming/Theming/Theme Data Source.asset.meta new file mode 100644 index 000000000..d8e4b4f75 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming/Theme Data Source.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 57993c46ea42acf4ca3067542443bc45 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Theming/Theme.cs b/org.mixedrealitytoolkit.theming/Theming/Theme.cs new file mode 100644 index 000000000..d368314af --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming/Theme.cs @@ -0,0 +1,76 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Serialization; + +namespace MixedReality.Toolkit.Theming +{ + /// + /// A ScriptableObject that provides concrete values for every item declared in a 's definition. + /// + [CreateAssetMenu(fileName = "Theme", menuName = "MRTK/Theming/Theme", order = 0)] + public class Theme : ScriptableObject + { + [SerializeField, FormerlySerializedAs("k__BackingField")] + private ThemeDataSource definition; + + /// + /// The schema that this theme conforms to. Every theme item must map to an item defined here. + /// + public ThemeDataSource Definition => definition; + + [SerializeReference] + [Tooltip("The items defining this theme's data mapped to the definition's items.")] + private List themeItems; + + /// + /// Attempts to retrieve the data for a specific theme item by its name and expected type. + /// + /// The expected type of the theme item data (e.g., ). + /// The name of the theme item as defined in the theme definition. + /// When this method returns, contains the item data if found, or the default value otherwise. + /// if an item with the specified name and type is found; otherwise, . + public bool TryGetItemData(string itemName, out T itemValue) + { + foreach (var themeItem in themeItems) + { + if (themeItem.Name == itemName && themeItem.Data is T themeItemData) + { + itemValue = themeItemData; + return true; + } + } + + itemValue = default; + return false; + } + + /// + /// Represents a single named entry in a theme containing a data payload. + /// + [Serializable] + internal class ThemeItem + { + /// + /// The name of the theme item. + /// + [field: SerializeField, HideInInspector] + public string Name { get; private set; } + + /// + /// The underlying data value for this theme item. + /// + [field: SerializeReference] + public object Data { get; private set; } + + public ThemeItem(string name, object data) + { + Name = name; + Data = data; + } + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Theming/Theme.cs.meta b/org.mixedrealitytoolkit.theming/Theming/Theme.cs.meta new file mode 100644 index 000000000..c91085e14 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming/Theme.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9530d537087fef24eb7a177accd13c7d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Theming/ThemeBinding.cs b/org.mixedrealitytoolkit.theming/Theming/ThemeBinding.cs new file mode 100644 index 000000000..f90bbb333 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming/ThemeBinding.cs @@ -0,0 +1,51 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEngine; + +namespace MixedReality.Toolkit.Theming +{ + public class ThemeBinding : MonoBehaviour + { + [SerializeField] + [Tooltip("The theme data source manager.")] + private ThemeDataSource themeDataSource; + + [SerializeReference, InterfaceSelector] + [Tooltip("The list of bound theme entries.")] + private IBinder[] binders; + + protected void OnEnable() + { + if (themeDataSource == null) + { + Debug.LogWarning($"{nameof(ThemeBinding)} on '{gameObject.name}' has no {nameof(ThemeDataSource)} assigned.", this); + return; + } + + foreach (IBinder binder in binders) + { + if (binder == null) + { + Debug.LogWarning($"{nameof(ThemeBinding)} on '{gameObject.name}' has a null binder entry.", this); + continue; + } + + if (string.IsNullOrWhiteSpace(binder.ThemeDefinitionItemName)) + { + Debug.LogWarning($"{nameof(ThemeBinding)} on '{gameObject.name}' has a {binder.GetType().Name} with no theme item assigned.", this); + } + + binder.Subscribe(themeDataSource); + } + } + + protected void OnDisable() + { + foreach (IBinder binder in binders) + { + binder?.Unsubscribe(themeDataSource); + } + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Theming/ThemeBinding.cs.meta b/org.mixedrealitytoolkit.theming/Theming/ThemeBinding.cs.meta new file mode 100644 index 000000000..621e0b4b3 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming/ThemeBinding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 699100ca886480c4a94ced56b1ae0e94 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Theming/ThemeDataSource.cs b/org.mixedrealitytoolkit.theming/Theming/ThemeDataSource.cs new file mode 100644 index 000000000..c69f2243a --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming/ThemeDataSource.cs @@ -0,0 +1,69 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.UIElements; + +namespace MixedReality.Toolkit.Theming +{ + [CreateAssetMenu(fileName = "Theme Data Source", menuName = "MRTK/Theming/Theme Data Source", order = 0)] + public class ThemeDataSource : ScriptableObject, INotifyValueChanged + { + [SerializeField] + private Theme activeTheme; + + [SerializeField] + private UnityEvent> onThemeChanged = new(); + + [SerializeField] + private ThemeDefinition themeDefinition; + + #region INotifyValueChanged + + /// + public Theme value + { + get => activeTheme; + set + { + if (value != null && value.Definition != this) + { + Debug.LogError($"New theme's definition ({value.Definition.name}) does not match this data source's active definition ({name})"); + } + + using (ChangeEvent changeEvent = ChangeEvent.GetPooled(activeTheme, value)) + { + // target is intentionally unset, as ThemeDataSource is not a UIElements visual + // element, but ChangeEvent is used for its newValue/previousValue semantics + // and object pooling + SetValueWithoutNotify(value); + onThemeChanged.Invoke(changeEvent); + } + } + } + + /// + public void SetValueWithoutNotify(Theme newValue) + { + activeTheme = newValue; + } + + #endregion INotifyValueChanged + + public void AddListener(UnityAction> action) + { + if (action == null) { return; } + onThemeChanged.AddListener(action); + if (activeTheme == null) { return; } + using ChangeEvent changeEvent = ChangeEvent.GetPooled(null, activeTheme); + action.Invoke(changeEvent); + } + + public void RemoveListener(UnityAction> action) + { + if (action == null) { return; } + onThemeChanged.RemoveListener(action); + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Theming/ThemeDataSource.cs.meta b/org.mixedrealitytoolkit.theming/Theming/ThemeDataSource.cs.meta new file mode 100644 index 000000000..381858223 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming/ThemeDataSource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f1a7927806b6cc45a1ef33fc3f04465 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Theming/ThemeDefinition.cs b/org.mixedrealitytoolkit.theming/Theming/ThemeDefinition.cs new file mode 100644 index 000000000..855afd78c --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming/ThemeDefinition.cs @@ -0,0 +1,26 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using System; +using UnityEngine; + +namespace MixedReality.Toolkit.Theming +{ + [Serializable] + public class ThemeDefinition + { + [field: SerializeField] + [Tooltip("The items defining the theme that can be bound to this source.")] + public ThemeDefinitionItem[] ThemeDefinitionItems { get; private set; } + + [Serializable] + public class ThemeDefinitionItem + { + [field: SerializeField] + public string Name { get; set; } + + [field: SerializeField, Extends(typeof(BaseThemeItemData<>), TypeGrouping.ByNamespaceFlat, AllowGenericTypeDefinition = true)] + public SystemType DataType { get; set; } + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Theming/ThemeDefinition.cs.meta b/org.mixedrealitytoolkit.theming/Theming/ThemeDefinition.cs.meta new file mode 100644 index 000000000..b9634812c --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming/ThemeDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b6e110c23f5e404dbbfdc87cb47ff23 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 595acc106320c4f4bdfd42cff4b9a8002bf9b9f1 Mon Sep 17 00:00:00 2001 From: Kurtis Date: Tue, 19 May 2026 17:45:59 -0700 Subject: [PATCH 06/18] org.mixedrealitytoolkit.uxcomponents updates --- .../Button/Prefabs/Action Button.prefab | 111 +++++++++++++++++- .../Button/Prefabs/Empty Button.prefab | 30 +++++ .../Button/Prefabs/UIMenuBackplate_R13.prefab | 24 ++++ .../Prefabs/UIPanelBackplate_R16.prefab | 24 ++++ .../ButtonBar/CanvasButtonBar.prefab | 44 +++---- .../CanvasButtonBar_SharedBackplate.prefab | 52 +++++--- .../CHANGELOG.md | 1 + .../Dialog/CanvasDialog.prefab | 48 ++++++++ .../SeeItSayItLabel-Canvas.prefab | 78 ++++++------ .../ToggleIndicators/Checkbox.prefab | 50 ++++++++ .../ToggleIndicators/ToggleSwitch.prefab | 38 ++++++ 11 files changed, 418 insertions(+), 82 deletions(-) diff --git a/org.mixedrealitytoolkit.uxcomponents/Button/Prefabs/Action Button.prefab b/org.mixedrealitytoolkit.uxcomponents/Button/Prefabs/Action Button.prefab index 0c2e860de..71579c827 100644 --- a/org.mixedrealitytoolkit.uxcomponents/Button/Prefabs/Action Button.prefab +++ b/org.mixedrealitytoolkit.uxcomponents/Button/Prefabs/Action Button.prefab @@ -905,10 +905,6 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7746750332524202746, guid: b85e005d231192249b7077b40a4d4e45, type: 3} - propertyPath: m_Enabled - value: 0 - objectReference: {fileID: 0} - target: {fileID: 8714766618717182506, guid: b85e005d231192249b7077b40a4d4e45, type: 3} propertyPath: 'managedReferences[1393819269385945089]' value: MixedReality.Toolkit.UXCore MixedReality.Toolkit.UX.GraphicTintEffect @@ -1138,6 +1134,9 @@ PrefabInstance: insertIndex: -1 addedObject: {fileID: 5319578128471115350} m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 3705378105823492738, guid: b85e005d231192249b7077b40a4d4e45, type: 3} + insertIndex: -1 + addedObject: {fileID: 7344942429739044722} - targetCorrespondingSourceObject: {fileID: 2828958436599032273, guid: b85e005d231192249b7077b40a4d4e45, type: 3} insertIndex: -1 addedObject: {fileID: 3015392985318836008} @@ -1153,11 +1152,33 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!114 &4185972052008607584 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 9026472854072389792, guid: b85e005d231192249b7077b40a4d4e45, type: 3} + m_PrefabInstance: {fileID: 5139722473249402816} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!224 &4185972052008607586 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 9026472854072389794, guid: b85e005d231192249b7077b40a4d4e45, type: 3} m_PrefabInstance: {fileID: 5139722473249402816} m_PrefabAsset: {fileID: 0} +--- !u!114 &4585478379361187306 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8714766618717182506, guid: b85e005d231192249b7077b40a4d4e45, type: 3} + m_PrefabInstance: {fileID: 5139722473249402816} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8376646494505211202} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 02df0dfd31465cf42bd60027ac90b874, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &6922469056340231697 stripped GameObject: m_CorrespondingSourceObject: {fileID: 2828958436599032273, guid: b85e005d231192249b7077b40a4d4e45, type: 3} @@ -1194,6 +1215,88 @@ RectTransform: m_CorrespondingSourceObject: {fileID: 2828958436599032274, guid: b85e005d231192249b7077b40a4d4e45, type: 3} m_PrefabInstance: {fileID: 5139722473249402816} m_PrefabAsset: {fileID: 0} +--- !u!1 &8376646494505211202 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3705378105823492738, guid: b85e005d231192249b7077b40a4d4e45, type: 3} + m_PrefabInstance: {fileID: 5139722473249402816} + m_PrefabAsset: {fileID: 0} +--- !u!114 &7344942429739044722 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8376646494505211202} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 6006879866990887121 + - rid: 6006879866990887122 + - rid: 6006879866990887123 + - rid: 6006879866990887124 + - rid: 6006879866990887125 + - rid: 6006879866990887126 + - rid: 6006879866990887127 + - rid: 6006879866990887129 + - rid: 6006879866990887128 + references: + version: 2 + RefIds: + - rid: 6006879866990887121 + type: {class: FontIconSetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: + k__BackingField: {fileID: 7245587814888172855} + k__BackingField: {fileID: 5095746839500215027} + k__BackingField: Icon Set + - rid: 6006879866990887122 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1922220768106560367} + k__BackingField: Text Font + - rid: 6006879866990887123 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1922220768106560367} + k__BackingField: On Surface Color + - rid: 6006879866990887124 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 8493469810320727241} + k__BackingField: On Surface Color + - rid: 6006879866990887125 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 5095746839500215027} + k__BackingField: On Surface Color + - rid: 6006879866990887126 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 2228947736508096533} + k__BackingField: On Surface Color + - rid: 6006879866990887127 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 8467006667157818416} + k__BackingField: Tab Indicator Material + - rid: 6006879866990887128 + type: {class: StateVisualizerEffectColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 4585478379361187306} + k__BackingField: Primary Color + stateName: Toggle + tintTarget: {fileID: 8467006667157818416} + - rid: 6006879866990887129 + type: {class: StateVisualizerEffectColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 4585478379361187306} + k__BackingField: Primary Color + stateName: Toggle + tintTarget: {fileID: 4185972052008607584} --- !u!224 &8376646494505211229 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 3705378105823492765, guid: b85e005d231192249b7077b40a4d4e45, type: 3} diff --git a/org.mixedrealitytoolkit.uxcomponents/Button/Prefabs/Empty Button.prefab b/org.mixedrealitytoolkit.uxcomponents/Button/Prefabs/Empty Button.prefab index e96e42393..b990a9ddd 100644 --- a/org.mixedrealitytoolkit.uxcomponents/Button/Prefabs/Empty Button.prefab +++ b/org.mixedrealitytoolkit.uxcomponents/Button/Prefabs/Empty Button.prefab @@ -345,6 +345,7 @@ GameObject: - component: {fileID: 7976009683108370513} - component: {fileID: 2632565233158286779} - component: {fileID: 1995394188294645620} + - component: {fileID: 3722787625447876489} m_Layer: 5 m_Name: Empty Button m_TagString: Untagged @@ -1002,6 +1003,35 @@ MonoBehaviour: seeItSayItLabel: {fileID: 3358038249354970442} pattern: Say '{0}' positionControl: {fileID: 0} +--- !u!114 &3722787625447876489 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3705378105823492738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 1538473242837123161 + - rid: 1538473242837123160 + references: + version: 2 + RefIds: + - rid: 1538473242837123160 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 9026472854072389792} + k__BackingField: Surface Color + - rid: 1538473242837123161 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 9026472854072389792} + k__BackingField: Canvas Backplate Quad Material --- !u!1 &9026472854072389795 GameObject: m_ObjectHideFlags: 0 diff --git a/org.mixedrealitytoolkit.uxcomponents/Button/Prefabs/UIMenuBackplate_R13.prefab b/org.mixedrealitytoolkit.uxcomponents/Button/Prefabs/UIMenuBackplate_R13.prefab index 648462b03..6b5d7d688 100644 --- a/org.mixedrealitytoolkit.uxcomponents/Button/Prefabs/UIMenuBackplate_R13.prefab +++ b/org.mixedrealitytoolkit.uxcomponents/Button/Prefabs/UIMenuBackplate_R13.prefab @@ -11,6 +11,7 @@ GameObject: - component: {fileID: 1619375032725711555} - component: {fileID: 961341594221179252} - component: {fileID: 8652067621810633434} + - component: {fileID: 785579326716734801} m_Layer: 5 m_Name: UIMenuBackplate_R13 m_TagString: Untagged @@ -76,3 +77,26 @@ MonoBehaviour: thickness: 2 wedges: 8 calculateSmoothEdges: 1 +--- !u!114 &785579326716734801 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8510261678218358358} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 7617100121658621954 + references: + version: 2 + RefIds: + - rid: 7617100121658621954 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 8652067621810633434} + k__BackingField: Backplate Material diff --git a/org.mixedrealitytoolkit.uxcomponents/Button/Prefabs/UIPanelBackplate_R16.prefab b/org.mixedrealitytoolkit.uxcomponents/Button/Prefabs/UIPanelBackplate_R16.prefab index c9cfd63b8..36c737c0e 100644 --- a/org.mixedrealitytoolkit.uxcomponents/Button/Prefabs/UIPanelBackplate_R16.prefab +++ b/org.mixedrealitytoolkit.uxcomponents/Button/Prefabs/UIPanelBackplate_R16.prefab @@ -11,6 +11,7 @@ GameObject: - component: {fileID: 1619375032725711555} - component: {fileID: 961341594221179252} - component: {fileID: 8652067621810633434} + - component: {fileID: 3367734699037627833} m_Layer: 5 m_Name: UIPanelBackplate_R16 m_TagString: Untagged @@ -76,3 +77,26 @@ MonoBehaviour: thickness: 2 wedges: 8 calculateSmoothEdges: 1 +--- !u!114 &3367734699037627833 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8510261678218358358} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 7617100121658621953 + references: + version: 2 + RefIds: + - rid: 7617100121658621953 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 8652067621810633434} + k__BackingField: Backplate Material diff --git a/org.mixedrealitytoolkit.uxcomponents/ButtonBar/CanvasButtonBar.prefab b/org.mixedrealitytoolkit.uxcomponents/ButtonBar/CanvasButtonBar.prefab index 6ae9e2554..285b2d2b3 100644 --- a/org.mixedrealitytoolkit.uxcomponents/ButtonBar/CanvasButtonBar.prefab +++ b/org.mixedrealitytoolkit.uxcomponents/ButtonBar/CanvasButtonBar.prefab @@ -13,6 +13,7 @@ GameObject: - component: {fileID: 6264478733034656625} - component: {fileID: 233999318278807519} - component: {fileID: 1925175511647506998} + - component: {fileID: 6793636336473426600} m_Layer: 5 m_Name: CanvasButtonBar m_TagString: Untagged @@ -120,6 +121,29 @@ MonoBehaviour: m_Spacing: {x: 0, y: 0} m_Constraint: 2 m_ConstraintCount: 1 +--- !u!114 &6793636336473426600 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6264478733034656630} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 1538473309753835627 + references: + version: 2 + RefIds: + - rid: 1538473309753835627 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 6264478733034656625} + k__BackingField: Backplate Material --- !u!1001 &1097437160816526514 PrefabInstance: m_ObjectHideFlags: 0 @@ -128,10 +152,6 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 6264478733034656631} m_Modifications: - - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - target: {fileID: 2142167140070017856, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive value: 0 @@ -302,10 +322,6 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 6264478733034656631} m_Modifications: - - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - target: {fileID: 2142167140070017856, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive value: 0 @@ -476,10 +492,6 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 6264478733034656631} m_Modifications: - - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - target: {fileID: 2142167140070017856, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive value: 0 @@ -650,14 +662,6 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 6264478733034656631} m_Modifications: - - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2142167140070017856, guid: c6b351a67ceb69140b199996bbbea156, type: 3} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} - target: {fileID: 5319578128471115350, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_AnchorMax.y value: 1 diff --git a/org.mixedrealitytoolkit.uxcomponents/ButtonBar/CanvasButtonBar_SharedBackplate.prefab b/org.mixedrealitytoolkit.uxcomponents/ButtonBar/CanvasButtonBar_SharedBackplate.prefab index fde831b78..914b65e60 100644 --- a/org.mixedrealitytoolkit.uxcomponents/ButtonBar/CanvasButtonBar_SharedBackplate.prefab +++ b/org.mixedrealitytoolkit.uxcomponents/ButtonBar/CanvasButtonBar_SharedBackplate.prefab @@ -119,6 +119,7 @@ GameObject: - component: {fileID: 6264478733034656625} - component: {fileID: 233999318278807519} - component: {fileID: 1925175511647506998} + - component: {fileID: 3508941522267798669} m_Layer: 5 m_Name: CanvasButtonBar_SharedBackplate m_TagString: Untagged @@ -227,6 +228,41 @@ MonoBehaviour: m_Spacing: {x: 0, y: 0} m_Constraint: 2 m_ConstraintCount: 1 +--- !u!114 &3508941522267798669 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6264478733034656630} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 1538473309753835628 + - rid: 1538473309753835629 + - rid: 1538473309753835630 + references: + version: 2 + RefIds: + - rid: 1538473309753835628 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 6264478733034656625} + k__BackingField: Backplate Material + - rid: 1538473309753835629 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 2047881656393054248} + k__BackingField: Canvas Backplate Quad Material + - rid: 1538473309753835630 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 2047881656393054248} + k__BackingField: Primary Container Color --- !u!1001 &1097437160816526514 PrefabInstance: m_ObjectHideFlags: 0 @@ -235,10 +271,6 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 6264478733034656631} m_Modifications: - - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - target: {fileID: 2142167140070017856, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive value: 0 @@ -413,10 +445,6 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 6264478733034656631} m_Modifications: - - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - target: {fileID: 2142167140070017856, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive value: 0 @@ -591,10 +619,6 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 6264478733034656631} m_Modifications: - - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - target: {fileID: 2142167140070017856, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive value: 0 @@ -769,10 +793,6 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 6264478733034656631} m_Modifications: - - target: {fileID: 410843422125320171, guid: c6b351a67ceb69140b199996bbbea156, type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - target: {fileID: 2142167140070017856, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive value: 0 diff --git a/org.mixedrealitytoolkit.uxcomponents/CHANGELOG.md b/org.mixedrealitytoolkit.uxcomponents/CHANGELOG.md index 8898a2a61..878047b6e 100644 --- a/org.mixedrealitytoolkit.uxcomponents/CHANGELOG.md +++ b/org.mixedrealitytoolkit.uxcomponents/CHANGELOG.md @@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). * Updated the minimum editor version to 6000.0.66f2 [PR #1112](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1112) * Reserialized prefabs and animations to remove stale serialized fields. [PR #1115](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1115) * Updated the Action Button prefab to have a more descriptive icon name. [PR #1117](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1117) +* Updated various prefabs to be themeable. [PR #1119](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1119) ## [4.0.0-pre.2] - 2025-12-05 diff --git a/org.mixedrealitytoolkit.uxcomponents/Dialog/CanvasDialog.prefab b/org.mixedrealitytoolkit.uxcomponents/Dialog/CanvasDialog.prefab index b3e3d4555..db6c6fc5a 100644 --- a/org.mixedrealitytoolkit.uxcomponents/Dialog/CanvasDialog.prefab +++ b/org.mixedrealitytoolkit.uxcomponents/Dialog/CanvasDialog.prefab @@ -213,6 +213,7 @@ GameObject: - component: {fileID: 3464395001938839902} - component: {fileID: 4665157281537287932} - component: {fileID: 941895475344048534} + - component: {fileID: 3304842204257264291} m_Layer: 5 m_Name: CanvasDialog m_TagString: Untagged @@ -281,6 +282,53 @@ Animator: m_AllowConstantClipSamplingOptimization: 1 m_KeepAnimatorStateOnDisable: 0 m_WriteDefaultValuesOnDisable: 0 +--- !u!114 &3304842204257264291 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6930810733556124559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 7617100121658622016 + - rid: 7617100121658622018 + - rid: 7617100121658622019 + - rid: 7617100121658622020 + - rid: 7617100121658622021 + references: + version: 2 + RefIds: + - rid: 7617100121658622016 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 6930810734963254062} + k__BackingField: On Surface Color + - rid: 7617100121658622018 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 6930810734963254062} + k__BackingField: Text Font + - rid: 7617100121658622019 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 6930810734943986774} + k__BackingField: On Surface Color + - rid: 7617100121658622020 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 6930810734943986774} + k__BackingField: Text Font + - rid: 7617100121658622021 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 8902223861511733022} + k__BackingField: Backplate Material --- !u!1 &6930810734943986772 GameObject: m_ObjectHideFlags: 0 diff --git a/org.mixedrealitytoolkit.uxcomponents/SeeItSayItLabel/SeeItSayItLabel-Canvas.prefab b/org.mixedrealitytoolkit.uxcomponents/SeeItSayItLabel/SeeItSayItLabel-Canvas.prefab index bfeafaf59..a3ea5643c 100644 --- a/org.mixedrealitytoolkit.uxcomponents/SeeItSayItLabel/SeeItSayItLabel-Canvas.prefab +++ b/org.mixedrealitytoolkit.uxcomponents/SeeItSayItLabel/SeeItSayItLabel-Canvas.prefab @@ -129,8 +129,6 @@ GameObject: m_Component: - component: {fileID: 2648010737493403592} - component: {fileID: 613211636435409487} - - component: {fileID: 6468409002762060768} - - component: {fileID: 1984157648487324098} m_Layer: 5 m_Name: CanvasRoot m_TagString: Untagged @@ -181,46 +179,6 @@ Canvas: m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 ---- !u!114 &6468409002762060768 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1400135068623992445} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 0 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 - m_PresetInfoIsWorld: 1 ---- !u!114 &1984157648487324098 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1400135068623992445} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 --- !u!1 &2542652557800958703 GameObject: m_ObjectHideFlags: 0 @@ -232,6 +190,7 @@ GameObject: - component: {fileID: 8174497233233282343} - component: {fileID: 7378201789336955507} - component: {fileID: 4142207705701966788} + - component: {fileID: -6408582823915813169} m_Layer: 0 m_Name: SeeItSayItLabel-Canvas m_TagString: Untagged @@ -330,6 +289,41 @@ MonoBehaviour: playbackMode: 0 weightMode: 0 transitionDuration: 0 +--- !u!114 &-6408582823915813169 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2542652557800958703} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 7617100032241303552 + - rid: 7617100032241303553 + - rid: 7617100032241303554 + references: + version: 2 + RefIds: + - rid: 7617100032241303552 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1094569825582854354} + k__BackingField: Backplate Material + - rid: 7617100032241303553 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 2762179398116406116} + k__BackingField: On Surface Color + - rid: 7617100032241303554 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 2762179398116406116} + k__BackingField: Text Font --- !u!1 &8925799636652996939 GameObject: m_ObjectHideFlags: 0 diff --git a/org.mixedrealitytoolkit.uxcomponents/ToggleIndicators/Checkbox.prefab b/org.mixedrealitytoolkit.uxcomponents/ToggleIndicators/Checkbox.prefab index cf0359e92..03d7421ec 100644 --- a/org.mixedrealitytoolkit.uxcomponents/ToggleIndicators/Checkbox.prefab +++ b/org.mixedrealitytoolkit.uxcomponents/ToggleIndicators/Checkbox.prefab @@ -13,6 +13,7 @@ GameObject: - component: {fileID: 4920426125932797076} - component: {fileID: 1755546517986312659} - component: {fileID: 1333775942222694079} + - component: {fileID: 5024593287958842062} m_Layer: 5 m_Name: Checkbox m_TagString: Untagged @@ -160,6 +161,31 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1345098608517470577} m_CullTransparentMesh: 1 +--- !u!114 &5024593287958842062 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1345098608517470577} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 6006879866990887130 + references: + version: 2 + RefIds: + - rid: 6006879866990887130 + type: {class: StateVisualizerEffectColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 6434074875067239604} + k__BackingField: Primary Color + stateName: Toggle + tintTarget: {fileID: 269199439855791924} --- !u!1 &7189414470030404245 GameObject: m_ObjectHideFlags: 0 @@ -172,6 +198,7 @@ GameObject: - component: {fileID: 1989956866083351710} - component: {fileID: 269199439855791924} - component: {fileID: 6136921357999623811} + - component: {fileID: 5834772403435721670} m_Layer: 5 m_Name: Icon m_TagString: Untagged @@ -248,3 +275,26 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 0fda4953718e0264291c42cb2a637fb5, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!114 &5834772403435721670 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7189414470030404245} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 7636826640568287483 + references: + version: 2 + RefIds: + - rid: 7636826640568287483 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 269199439855791924} + k__BackingField: On Surface Color diff --git a/org.mixedrealitytoolkit.uxcomponents/ToggleIndicators/ToggleSwitch.prefab b/org.mixedrealitytoolkit.uxcomponents/ToggleIndicators/ToggleSwitch.prefab index a423ca38f..ce378c389 100644 --- a/org.mixedrealitytoolkit.uxcomponents/ToggleIndicators/ToggleSwitch.prefab +++ b/org.mixedrealitytoolkit.uxcomponents/ToggleIndicators/ToggleSwitch.prefab @@ -12,6 +12,7 @@ GameObject: - component: {fileID: 6434074875067239604} - component: {fileID: 4920426125932797076} - component: {fileID: 1755546517986312659} + - component: {fileID: 1109057887825850324} m_Layer: 5 m_Name: ToggleSwitch m_TagString: Untagged @@ -152,6 +153,43 @@ MonoBehaviour: m_FlexibleWidth: -1 m_FlexibleHeight: -1 m_LayoutPriority: 1 +--- !u!114 &1109057887825850324 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1345098608517470577} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 1538473376477610083 + - rid: 7636826640568287486 + - rid: 1538473382797639794 + references: + version: 2 + RefIds: + - rid: 1538473376477610083 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 269199439855791924} + k__BackingField: Surface Container Color + - rid: 1538473382797639794 + type: {class: StateVisualizerEffectColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 6434074875067239604} + k__BackingField: Primary Color + stateName: Toggle + tintTarget: {fileID: 269199439855791924} + - rid: 7636826640568287486 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 8388226346315569560} + k__BackingField: Primary Color --- !u!1 &7189414470030404245 GameObject: m_ObjectHideFlags: 0 From 2365952513f2278114d2cfdc6f91844780fde102 Mon Sep 17 00:00:00 2001 From: Kurtis Date: Tue, 19 May 2026 18:25:27 -0700 Subject: [PATCH 07/18] Update examples --- .../CanvasExample/TopNavigationExample.prefab | 48 +- .../SampleSceneHelper/DescriptionPanel.prefab | 82 ++- .../Assets/Scenes/CanvasUITearsheet.unity | 636 ++++++++++++++++-- 3 files changed, 689 insertions(+), 77 deletions(-) diff --git a/UnityProjects/MRTKDevTemplate/Assets/Prefabs/CanvasExample/TopNavigationExample.prefab b/UnityProjects/MRTKDevTemplate/Assets/Prefabs/CanvasExample/TopNavigationExample.prefab index e1197c0d0..b66946e40 100644 --- a/UnityProjects/MRTKDevTemplate/Assets/Prefabs/CanvasExample/TopNavigationExample.prefab +++ b/UnityProjects/MRTKDevTemplate/Assets/Prefabs/CanvasExample/TopNavigationExample.prefab @@ -427,6 +427,7 @@ GameObject: - component: {fileID: 4095427112833100002} - component: {fileID: 4095427112833100000} - component: {fileID: 4095427112833100001} + - component: {fileID: 7538724603407037766} m_Layer: 5 m_Name: TopNavigationExample m_TagString: Untagged @@ -493,6 +494,47 @@ MonoBehaviour: thickness: 2 wedges: 8 calculateSmoothEdges: 1 +--- !u!114 &7538724603407037766 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4095427112833100003} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 7636826640568287471 + - rid: 7617100123102511115 + - rid: 7617100121658621991 + - rid: 7617100121658621992 + references: + version: 2 + RefIds: + - rid: 7617100121658621991 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 6126417514449433620} + k__BackingField: On Surface Color + - rid: 7617100121658621992 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 6126417514449433620} + k__BackingField: Text Font + - rid: 7617100123102511115 + type: {class: ImageSpriteBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 7377956084833273159} + k__BackingField: MRTK Logo + - rid: 7636826640568287471 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 4095427112833100001} + k__BackingField: Backplate Material --- !u!1 &4095427113250735759 GameObject: m_ObjectHideFlags: 0 @@ -810,7 +852,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 100 + value: Lightbulb objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -984,7 +1026,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 107 + value: Movie objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -1678,7 +1720,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 92 + value: Heart Outline objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name diff --git a/UnityProjects/MRTKDevTemplate/Assets/Prefabs/SampleSceneHelper/DescriptionPanel.prefab b/UnityProjects/MRTKDevTemplate/Assets/Prefabs/SampleSceneHelper/DescriptionPanel.prefab index be7600e38..86a3a12dd 100644 --- a/UnityProjects/MRTKDevTemplate/Assets/Prefabs/SampleSceneHelper/DescriptionPanel.prefab +++ b/UnityProjects/MRTKDevTemplate/Assets/Prefabs/SampleSceneHelper/DescriptionPanel.prefab @@ -674,6 +674,7 @@ GameObject: - component: {fileID: 3220012215463627515} - component: {fileID: 8084989196684289760} - component: {fileID: 5404797170367061738} + - component: {fileID: 863618738849702724} m_Layer: 5 m_Name: DescriptionPanel m_TagString: Untagged @@ -750,7 +751,84 @@ MonoBehaviour: m_FallbackScreenDPI: 96 m_DefaultSpriteDPI: 96 m_DynamicPixelsPerUnit: 1 - m_PresetInfoIsWorld: 0 + m_PresetInfoIsWorld: 1 +--- !u!114 &863618738849702724 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6540126486176102408} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 7617100123102511104 + - rid: 7617100123102511105 + - rid: 7617100123102511106 + - rid: 7617100123102511107 + - rid: 7617100123102511108 + - rid: 7617100123102511109 + - rid: 7617100123102511110 + - rid: 7617100123102511111 + - rid: 7617100123102511113 + - rid: 7617100459693309976 + references: + version: 2 + RefIds: + - rid: 7617100123102511104 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 6809291684801504143} + k__BackingField: On Surface Color + - rid: 7617100123102511105 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 6809291684801504143} + k__BackingField: Text Font + - rid: 7617100123102511106 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 4568172237328552037} + k__BackingField: On Surface Color + - rid: 7617100123102511107 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 4568172237328552037} + k__BackingField: Text Font + - rid: 7617100123102511108 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 2446705927233332293} + k__BackingField: On Surface Color + - rid: 7617100123102511109 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 2446705927233332293} + k__BackingField: Text Font + - rid: 7617100123102511110 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 4376175471552893095} + k__BackingField: On Surface Color + - rid: 7617100123102511111 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 5822078602719066722} + k__BackingField: On Surface Color + - rid: 7617100123102511113 + type: {class: SpriteRendererSpriteBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1051251617942771901} + k__BackingField: MRTK Logo + - rid: 7617100459693309976 + type: {class: RendererMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 6676203961570324161} + k__BackingField: Non-Canvas Backplate (8mm) Material --- !u!1 &7368034384095272423 GameObject: m_ObjectHideFlags: 0 @@ -795,7 +873,7 @@ GameObject: - component: {fileID: 3732017194820540582} - component: {fileID: 1051251617942771901} m_Layer: 0 - m_Name: MRTK_Logo_White + m_Name: MRTK_Logo m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/UnityProjects/MRTKDevTemplate/Assets/Scenes/CanvasUITearsheet.unity b/UnityProjects/MRTKDevTemplate/Assets/Scenes/CanvasUITearsheet.unity index 94b5fd81f..ec1b0441e 100644 --- a/UnityProjects/MRTKDevTemplate/Assets/Scenes/CanvasUITearsheet.unity +++ b/UnityProjects/MRTKDevTemplate/Assets/Scenes/CanvasUITearsheet.unity @@ -365,7 +365,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 133 + value: Favorite objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -703,7 +703,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 72 + value: Cut objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -917,7 +917,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 115 + value: Group objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -1235,7 +1235,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 51 + value: Horizontal List objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -1400,6 +1400,7 @@ GameObject: - component: {fileID: 65389175} - component: {fileID: 65389174} - component: {fileID: 65389173} + - component: {fileID: 65389177} m_Layer: 5 m_Name: Buttons Canvas m_TagString: Untagged @@ -1494,6 +1495,65 @@ RectTransform: m_AnchoredPosition: {x: -0.5737, y: -0.04201} m_SizeDelta: {x: 352.4888, y: 281.9509} m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &65389177 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 65389172} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 1538473376477610090 + - rid: 1538473376477610091 + - rid: 1538473376477610092 + - rid: 1538473376477610087 + - rid: 1538473376477610088 + - rid: 1538473382797639792 + - rid: 1538473382797639793 + references: + version: 2 + RefIds: + - rid: 1538473376477610087 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 6515328879105725118} + k__BackingField: Backplate Material + - rid: 1538473376477610088 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1944714600} + k__BackingField: Backplate Material + - rid: 1538473376477610090 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 2100425384} + k__BackingField: Text Font + - rid: 1538473376477610091 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 86645938} + k__BackingField: Text Font + - rid: 1538473376477610092 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 11163958} + k__BackingField: Text Font + - rid: 1538473382797639792 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1622854746} + k__BackingField: Text Font + - rid: 1538473382797639793 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1622854746} + k__BackingField: On Surface Color --- !u!1001 &68209847 PrefabInstance: m_ObjectHideFlags: 0 @@ -1568,7 +1628,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 104 + value: Mail objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -2504,7 +2564,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 141 + value: Undo objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -2919,7 +2979,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 26 + value: Sound objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -3117,7 +3177,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 91 + value: Headphones objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -3587,7 +3647,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 4 + value: Brightness objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -4068,7 +4128,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 53 + value: Camera objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -4698,7 +4758,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 31 + value: Notifications objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -6506,7 +6566,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 93 + value: History objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -6772,7 +6832,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 84 + value: Globe objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -6989,7 +7049,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 35 + value: List objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -7187,7 +7247,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 26 + value: Sound objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -7708,7 +7768,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 4 + value: Brightness objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -8299,7 +8359,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 19 + value: Write Mail objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -8489,7 +8549,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 94 + value: Home objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -8695,7 +8755,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 119 + value: Devices objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -9142,7 +9202,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 91 + value: Headphones objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -9706,7 +9766,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 91 + value: Headphones objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -10089,7 +10149,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 4 + value: Brightness objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -10720,7 +10780,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 37 + value: Reset objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -11377,7 +11437,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 85 + value: Edit objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -12355,7 +12415,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 53 + value: Camera objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -12549,7 +12609,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 65 + value: Zoom objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -12997,7 +13057,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 100 + value: Lightbulb objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -13349,7 +13409,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 40 + value: Move objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -13993,7 +14053,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 113 + value: Settings Sliders objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -14329,7 +14389,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 107 + value: Movie objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -14469,6 +14529,7 @@ GameObject: - component: {fileID: 1000460828} - component: {fileID: 1000460827} - component: {fileID: 1000460826} + - component: {fileID: 1000460830} m_Layer: 5 m_Name: Single Buttons Canvas m_TagString: Untagged @@ -14559,6 +14620,53 @@ RectTransform: m_AnchoredPosition: {x: -0.5773, y: -0.2353} m_SizeDelta: {x: 345.3021, y: 156.8906} m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1000460830 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1000460825} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 1538473376477610093 + - rid: 1538473376477610094 + - rid: 1538473382797639789 + - rid: 1538473382797639790 + - rid: 1538473382797639791 + references: + version: 2 + RefIds: + - rid: 1538473376477610093 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1023697618} + k__BackingField: Text Font + - rid: 1538473376477610094 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 692976829} + k__BackingField: Text Font + - rid: 1538473382797639789 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1031621825} + k__BackingField: Backplate Material + - rid: 1538473382797639790 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1304147007} + k__BackingField: Backplate Material + - rid: 1538473382797639791 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 154440646} + k__BackingField: Backplate Material --- !u!1 &1005008029 GameObject: m_ObjectHideFlags: 0 @@ -15431,7 +15539,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 74 + value: Bar Chart objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -15854,7 +15962,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 114 + value: Hierarchy objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -16112,6 +16220,7 @@ GameObject: - component: {fileID: 1092179574} - component: {fileID: 1092179573} - component: {fileID: 1092179572} + - component: {fileID: 1092179576} m_Layer: 5 m_Name: Dialogs Canvas m_TagString: Untagged @@ -16202,6 +16311,35 @@ RectTransform: m_AnchoredPosition: {x: 0.6818, y: -0.1034} m_SizeDelta: {x: 240.0909, y: 404.8173} m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1092179576 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1092179571} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 1538473382797639770 + - rid: 1538473382797639771 + references: + version: 2 + RefIds: + - rid: 1538473382797639770 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1488121690} + k__BackingField: Text Font + - rid: 1538473382797639771 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1854885406} + k__BackingField: Backplate Material --- !u!1 &1093577523 GameObject: m_ObjectHideFlags: 0 @@ -16214,6 +16352,7 @@ GameObject: - component: {fileID: 1093577526} - component: {fileID: 1093577525} - component: {fileID: 1093577524} + - component: {fileID: 1093577528} m_Layer: 5 m_Name: Top Navigation Canvas m_TagString: Untagged @@ -16306,6 +16445,35 @@ RectTransform: m_AnchoredPosition: {x: -0.0175, y: -0.309} m_SizeDelta: {x: 227.4141, y: 146.1393} m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1093577528 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093577523} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 1538473376477610114 + - rid: 1538473376477610115 + references: + version: 2 + RefIds: + - rid: 1538473376477610114 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1045922682} + k__BackingField: Text Font + - rid: 1538473376477610115 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 272965574} + k__BackingField: Text Font --- !u!1001 &1096736671 PrefabInstance: m_ObjectHideFlags: 0 @@ -16380,7 +16548,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 72 + value: Cut objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -16578,7 +16746,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 98 + value: Pen Tip objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -17831,6 +17999,7 @@ GameObject: - component: {fileID: 1158768844} - component: {fileID: 1158768843} - component: {fileID: 1158768842} + - component: {fileID: 1158768846} m_Layer: 5 m_Name: Button Grid Canvas m_TagString: Untagged @@ -17921,6 +18090,53 @@ RectTransform: m_AnchoredPosition: {x: -0.27, y: -0.304} m_SizeDelta: {x: 255.8181, y: 283.6979} m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1158768846 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1158768841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 1538473376477610102 + - rid: 1538473376477610103 + - rid: 1538473376477610107 + - rid: 1538473376477610105 + - rid: 1538473376477610106 + references: + version: 2 + RefIds: + - rid: 1538473376477610102 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1503675472} + k__BackingField: Text Font + - rid: 1538473376477610103 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1935111451} + k__BackingField: Text Font + - rid: 1538473376477610105 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 101034064} + k__BackingField: Backplate Material + - rid: 1538473376477610106 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 335940730} + k__BackingField: Backplate Material + - rid: 1538473376477610107 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1983684640} + k__BackingField: Backplate Material --- !u!1001 &1170466718 PrefabInstance: m_ObjectHideFlags: 0 @@ -18085,8 +18301,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 80f85af46f9bddd4ea78f11cee5e3b2e, type: 3} m_Name: m_EditorClassIdentifier: - handType: 3 - proximityType: 3 + handType: -1 + proximityType: -1 executionOrder: 0 minimumScale: {x: 0.2, y: 0.2, z: 0.2} maximumScale: {x: 2, y: 2, z: 2} @@ -18429,7 +18645,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 74 + value: Bar Chart objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -18641,7 +18857,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 45 + value: Attach objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -18839,7 +19055,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 139 + value: Videocam objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -19037,7 +19253,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 67 + value: Color Palette objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -19231,7 +19447,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 91 + value: Headphones objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -20049,7 +20265,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 139 + value: Videocam objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -20468,7 +20684,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 101 + value: Link objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -21380,7 +21596,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 14 + value: Add Location objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -21574,7 +21790,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 77 + value: Icon 62298 objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -22109,7 +22325,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 129 + value: Save objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -23487,7 +23703,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 31 + value: Notifications objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -23810,7 +24026,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 25 + value: Save As objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -24121,7 +24337,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 110 + value: Newspaper objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -25122,6 +25338,7 @@ GameObject: - component: {fileID: 1623931609} - component: {fileID: 1623931608} - component: {fileID: 1623931607} + - component: {fileID: 1623931611} m_Layer: 5 m_Name: Sliders Canvas m_TagString: Untagged @@ -25212,6 +25429,71 @@ RectTransform: m_AnchoredPosition: {x: 0.94920003, y: -0.0954} m_SizeDelta: {x: 302.2189, y: 388.8804} m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1623931611 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623931606} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 1538473382797639772 + - rid: 1538473382797639773 + - rid: 1538473382797639774 + - rid: 1538473382797639775 + - rid: 1538473382797639776 + - rid: 1538473382797639777 + - rid: 1538473382797639778 + - rid: 1538473382797639779 + references: + version: 2 + RefIds: + - rid: 1538473382797639772 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 163304840} + k__BackingField: Text Font + - rid: 1538473382797639773 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1600123139} + k__BackingField: Text Font + - rid: 1538473382797639774 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1512031908} + k__BackingField: Text Font + - rid: 1538473382797639775 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 200481605} + k__BackingField: Text Font + - rid: 1538473382797639776 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1122456286} + k__BackingField: Text Font + - rid: 1538473382797639777 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 85912329} + k__BackingField: Backplate Material + - rid: 1538473382797639778 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1290890165} + k__BackingField: Backplate Material + - rid: 1538473382797639779 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1122818196} + k__BackingField: Backplate Material --- !u!1001 &1630388036 PrefabInstance: m_ObjectHideFlags: 0 @@ -25378,6 +25660,7 @@ GameObject: - component: {fileID: 1635487815} - component: {fileID: 1635487814} - component: {fileID: 1635487813} + - component: {fileID: 1635487817} m_Layer: 5 m_Name: ListMenus Canvas m_TagString: Untagged @@ -25468,6 +25751,107 @@ RectTransform: m_AnchoredPosition: {x: 0.388, y: -0.151} m_SizeDelta: {x: 414.4783, y: 500} m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1635487817 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1635487812} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 1538473382797639769 + - rid: 1538473382797639768 + - rid: 1538473382797639767 + - rid: 1538473382797639766 + - rid: 1538473382797639765 + - rid: 1538473382797639764 + - rid: 1538473382797639780 + - rid: 1538473382797639781 + - rid: 1538473382797639782 + - rid: 1538473382797639783 + - rid: 1538473382797639784 + - rid: 1538473382797639785 + - rid: 1538473382797639788 + - rid: 1538473382797639787 + references: + version: 2 + RefIds: + - rid: 1538473382797639764 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 2087755159} + k__BackingField: Backplate Material + - rid: 1538473382797639765 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 553395888} + k__BackingField: Backplate Material + - rid: 1538473382797639766 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1482164464} + k__BackingField: Backplate Material + - rid: 1538473382797639767 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 682545842} + k__BackingField: Backplate Material + - rid: 1538473382797639768 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1635540425} + k__BackingField: Text Font + - rid: 1538473382797639769 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 308180794} + k__BackingField: Text Font + - rid: 1538473382797639780 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 759505762} + k__BackingField: Text Font + - rid: 1538473382797639781 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 759505762} + k__BackingField: On Surface Color + - rid: 1538473382797639782 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 83153274} + k__BackingField: Text Font + - rid: 1538473382797639783 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 83153274} + k__BackingField: On Surface Color + - rid: 1538473382797639784 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1894806655} + k__BackingField: Text Font + - rid: 1538473382797639785 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1894806655} + k__BackingField: On Surface Color + - rid: 1538473382797639787 + type: {class: GraphicColorBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1674269242} + k__BackingField: On Surface Color + - rid: 1538473382797639788 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1674269242} + k__BackingField: Text Font --- !u!1 &1635540422 GameObject: m_ObjectHideFlags: 0 @@ -25806,7 +26190,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 53 + value: Camera objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -26000,7 +26384,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 107 + value: Movie objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -26630,7 +27014,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 62 + value: Paste objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -26778,6 +27162,7 @@ GameObject: - component: {fileID: 1714867594} - component: {fileID: 1714867593} - component: {fileID: 1714867592} + - component: {fileID: 1714867595} m_Layer: 5 m_Name: Toggle Button Canvas m_TagString: Untagged @@ -26872,6 +27257,53 @@ Canvas: m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 +--- !u!114 &1714867595 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714867590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 1538473376477610112 + - rid: 1538473376477610111 + - rid: 1538473376477610113 + - rid: 1538473376477610109 + - rid: 1538473376477610110 + references: + version: 2 + RefIds: + - rid: 1538473376477610109 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1329564639} + k__BackingField: Backplate Material + - rid: 1538473376477610110 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 47797543} + k__BackingField: Backplate Material + - rid: 1538473376477610111 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 332225188} + k__BackingField: Text Font + - rid: 1538473376477610112 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1148378778} + k__BackingField: Text Font + - rid: 1538473376477610113 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1187780963} + k__BackingField: Text Font --- !u!1 &1729846265 GameObject: m_ObjectHideFlags: 0 @@ -27068,7 +27500,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 4 + value: Brightness objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -27335,7 +27767,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 40 + value: Move objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -27733,7 +28165,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 92 + value: Heart Outline objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -28177,7 +28609,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 82 + value: Doc objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -28381,7 +28813,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 132 + value: Settings objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -28605,7 +29037,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 4 + value: Brightness objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -29037,7 +29469,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 92 + value: Heart Outline objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -29231,7 +29663,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 111 + value: Sticky Note objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -29764,7 +30196,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 85 + value: Edit objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -29980,7 +30412,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 92 + value: Heart Outline objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -30209,7 +30641,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 63 + value: Time objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -30407,7 +30839,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 95 + value: Photo objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -30601,7 +31033,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 34 + value: Mobile objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -30970,7 +31402,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 92 + value: Heart Outline objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -31284,7 +31716,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 76 + value: Delete objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -31482,7 +31914,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 5 + value: Calendar objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -31690,7 +32122,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 115 + value: Group objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -32026,7 +32458,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 20 + value: Mic objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -32230,7 +32662,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 54 + value: Shopping Cart objectReference: {fileID: 0} - target: {fileID: 8376646494505211202, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_Name @@ -33408,7 +33840,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7245587814888172855, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: currentIconName - value: Icon 22 + value: Music objectReference: {fileID: 0} - target: {fileID: 7594107385585372191, guid: c6b351a67ceb69140b199996bbbea156, type: 3} propertyPath: m_IsActive @@ -33580,6 +34012,7 @@ GameObject: - component: {fileID: 2127076437} - component: {fileID: 2127076436} - component: {fileID: 2127076435} + - component: {fileID: 2127076439} m_Layer: 5 m_Name: Button Bar Canvas m_TagString: Untagged @@ -33670,6 +34103,65 @@ RectTransform: m_AnchoredPosition: {x: -0.28, y: -0.058} m_SizeDelta: {x: 261.305, y: 253.3427} m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2127076439 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2127076434} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3} + m_Name: + m_EditorClassIdentifier: + themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2} + binders: + - rid: 1538473376477610101 + - rid: 1538473376477610100 + - rid: 1538473376477610099 + - rid: 1538473376477610098 + - rid: 1538473376477610097 + - rid: 1538473376477610096 + - rid: 1538473376477610095 + references: + version: 2 + RefIds: + - rid: 1538473376477610095 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 201720336} + k__BackingField: Backplate Material + - rid: 1538473376477610096 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1424732240} + k__BackingField: Backplate Material + - rid: 1538473376477610097 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 14468909} + k__BackingField: Backplate Material + - rid: 1538473376477610098 + type: {class: GraphicMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1073055408} + k__BackingField: Backplate Material + - rid: 1538473376477610099 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1876059102} + k__BackingField: Text Font + - rid: 1538473376477610100 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 861724341} + k__BackingField: Text Font + - rid: 1538473376477610101 + type: {class: TMP_TextFontAssetBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming} + data: + k__BackingField: {fileID: 1290511388} + k__BackingField: Text Font --- !u!1001 &2137575390 PrefabInstance: m_ObjectHideFlags: 0 From b7b846d96d68a4117f4c86c479020f40023f4ae3 Mon Sep 17 00:00:00 2001 From: Kurtis Date: Wed, 20 May 2026 12:44:08 -0700 Subject: [PATCH 08/18] Update CHANGELOGs Update package.json --- org.mixedrealitytoolkit.core/CHANGELOG.md | 2 +- org.mixedrealitytoolkit.standardassets/CHANGELOG.md | 2 +- org.mixedrealitytoolkit.standardassets/package.json | 2 +- org.mixedrealitytoolkit.theming/CHANGELOG.md | 2 +- org.mixedrealitytoolkit.uxcomponents/CHANGELOG.md | 2 +- org.mixedrealitytoolkit.uxcore/CHANGELOG.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/org.mixedrealitytoolkit.core/CHANGELOG.md b/org.mixedrealitytoolkit.core/CHANGELOG.md index 95c1911e6..f58f6423b 100644 --- a/org.mixedrealitytoolkit.core/CHANGELOG.md +++ b/org.mixedrealitytoolkit.core/CHANGELOG.md @@ -2,7 +2,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). -## Unreleased +## [4.0.0-pre.3] - 2026-05-20 ### Added diff --git a/org.mixedrealitytoolkit.standardassets/CHANGELOG.md b/org.mixedrealitytoolkit.standardassets/CHANGELOG.md index 880333c41..d63df890a 100644 --- a/org.mixedrealitytoolkit.standardassets/CHANGELOG.md +++ b/org.mixedrealitytoolkit.standardassets/CHANGELOG.md @@ -2,7 +2,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). -## Unreleased +## [3.3.0-pre.1] - 2026-05-20 ### Changed diff --git a/org.mixedrealitytoolkit.standardassets/package.json b/org.mixedrealitytoolkit.standardassets/package.json index b770573e2..0a7bb68b7 100644 --- a/org.mixedrealitytoolkit.standardassets/package.json +++ b/org.mixedrealitytoolkit.standardassets/package.json @@ -1,6 +1,6 @@ { "name": "org.mixedrealitytoolkit.standardassets", - "version": "3.3.0-development", + "version": "3.3.0-development.pre.1", "description": "Common assets used by the MRTK packages, including common fonts, materials, and models. Relies on the Graphics Tools collection of shaders.", "displayName": "MRTK Standard Assets", "msftFeatureCategory": "MRTK3", diff --git a/org.mixedrealitytoolkit.theming/CHANGELOG.md b/org.mixedrealitytoolkit.theming/CHANGELOG.md index ae04a133c..ff4a26279 100644 --- a/org.mixedrealitytoolkit.theming/CHANGELOG.md +++ b/org.mixedrealitytoolkit.theming/CHANGELOG.md @@ -2,7 +2,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). -## Unreleased +## [1.0.0-pre.1] - 2026-05-20 ### Added diff --git a/org.mixedrealitytoolkit.uxcomponents/CHANGELOG.md b/org.mixedrealitytoolkit.uxcomponents/CHANGELOG.md index 878047b6e..b1d8ccc78 100644 --- a/org.mixedrealitytoolkit.uxcomponents/CHANGELOG.md +++ b/org.mixedrealitytoolkit.uxcomponents/CHANGELOG.md @@ -2,7 +2,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). -## Unreleased +## [4.0.0-pre.3] - 2026-05-20 ### Changed diff --git a/org.mixedrealitytoolkit.uxcore/CHANGELOG.md b/org.mixedrealitytoolkit.uxcore/CHANGELOG.md index 3b6e09408..56540f95b 100644 --- a/org.mixedrealitytoolkit.uxcore/CHANGELOG.md +++ b/org.mixedrealitytoolkit.uxcore/CHANGELOG.md @@ -2,7 +2,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). -## Unreleased +## [4.0.0-pre.3] - 2026-05-20 ### Added From 08724ccc2546e4ef8afdfec5c91f1830c51bd905 Mon Sep 17 00:00:00 2001 From: Kurtis Date: Wed, 20 May 2026 17:08:55 -0700 Subject: [PATCH 09/18] Update some icons --- org.mixedrealitytoolkit.standardassets/CHANGELOG.md | 2 +- .../Fonts/Selawik-Semibold-MRTKIcons.asset | 8 ++++---- .../Icons/MRTK_FluentIconSet.asset | 8 ++++---- .../FontIcons/MRTKFontIconSetDefinition.asset | 5 +++-- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/org.mixedrealitytoolkit.standardassets/CHANGELOG.md b/org.mixedrealitytoolkit.standardassets/CHANGELOG.md index d63df890a..c1607aa34 100644 --- a/org.mixedrealitytoolkit.standardassets/CHANGELOG.md +++ b/org.mixedrealitytoolkit.standardassets/CHANGELOG.md @@ -6,7 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ### Changed -* Updated icon names in MRTK_FluentIconSet.asset and Selawik-Semibold-MRTKIcons.asset to be more descriptive. [PR #1077](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1077) +* Updated icon names in MRTK_FluentIconSet.asset and Selawik-Semibold-MRTKIcons.asset to be more descriptive. [PR #1077](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1077) & [PR #1119](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1119) ## [3.2.1] - 2025-11-12 diff --git a/org.mixedrealitytoolkit.standardassets/Fonts/Selawik-Semibold-MRTKIcons.asset b/org.mixedrealitytoolkit.standardassets/Fonts/Selawik-Semibold-MRTKIcons.asset index 273a4c1eb..2d1d96dd7 100644 --- a/org.mixedrealitytoolkit.standardassets/Fonts/Selawik-Semibold-MRTKIcons.asset +++ b/org.mixedrealitytoolkit.standardassets/Fonts/Selawik-Semibold-MRTKIcons.asset @@ -142,7 +142,7 @@ MonoBehaviour: value: 62174 - key: Alarm value: 62178 - - key: Zoom + - key: Cloud value: 62181 - key: Open In New value: 62194 @@ -166,7 +166,7 @@ MonoBehaviour: value: 62277 - key: Delete value: 62285 - - key: Icon 62298 + - key: Computer value: 62298 - key: Dialpad value: 62303 @@ -174,7 +174,7 @@ MonoBehaviour: value: 62314 - key: Cancel value: 62318 - - key: Layout 2 + - key: Layout value: 62326 - key: Doc value: 62329 @@ -216,7 +216,7 @@ MonoBehaviour: value: 62679 - key: Link value: 62693 - - key: Icon 62700 + - key: Link 2 value: 62700 - key: Location On value: 62713 diff --git a/org.mixedrealitytoolkit.standardassets/Icons/MRTK_FluentIconSet.asset b/org.mixedrealitytoolkit.standardassets/Icons/MRTK_FluentIconSet.asset index c08e6a2b8..54e471c82 100644 --- a/org.mixedrealitytoolkit.standardassets/Icons/MRTK_FluentIconSet.asset +++ b/org.mixedrealitytoolkit.standardassets/Icons/MRTK_FluentIconSet.asset @@ -142,7 +142,7 @@ MonoBehaviour: value: 62174 - key: Alarm value: 62178 - - key: Zoom + - key: Cloud value: 62181 - key: Open In New value: 62194 @@ -166,7 +166,7 @@ MonoBehaviour: value: 62277 - key: Delete value: 62285 - - key: Icon 77 + - key: Computer value: 62298 - key: Dialpad value: 62303 @@ -174,7 +174,7 @@ MonoBehaviour: value: 62314 - key: Cancel value: 62318 - - key: Layout 2 + - key: Layout value: 62326 - key: Doc value: 62329 @@ -216,7 +216,7 @@ MonoBehaviour: value: 62679 - key: Link value: 62693 - - key: Icon 102 + - key: Link 2 value: 62700 - key: Location On value: 62713 diff --git a/org.mixedrealitytoolkit.uxcore/FontIcons/MRTKFontIconSetDefinition.asset b/org.mixedrealitytoolkit.uxcore/FontIcons/MRTKFontIconSetDefinition.asset index aee01c636..787f96148 100644 --- a/org.mixedrealitytoolkit.uxcore/FontIcons/MRTKFontIconSetDefinition.asset +++ b/org.mixedrealitytoolkit.uxcore/FontIcons/MRTKFontIconSetDefinition.asset @@ -72,7 +72,7 @@ MonoBehaviour: - Flag Outline - Folder - Globe - - Graph 1 + - Graph - Grid View - Group - Hand Left @@ -88,11 +88,12 @@ MonoBehaviour: - Keyboard - Label - Language - - Layout 2 + - Layout - Layout Grid - Lightbulb - Line Chart - Link + - Link 2 - List - Location Off - Location On From 55f1bf240fda6681fc98dcdd77a139b80540e594 Mon Sep 17 00:00:00 2001 From: Kurtis Date: Wed, 20 May 2026 17:25:46 -0700 Subject: [PATCH 10/18] Move ThemeBinding into UXCore --- org.mixedrealitytoolkit.theming/README.md | 3 +++ org.mixedrealitytoolkit.uxcore/Theming.meta | 8 +++++++ .../Theming/AssemblyInfo.cs | 12 ++++++++++ .../Theming/AssemblyInfo.cs.meta | 2 ++ .../Theming/MRTK.UXCore.Theming.asmdef | 23 +++++++++++++++++++ .../Theming/MRTK.UXCore.Theming.asmdef.meta | 7 ++++++ .../Theming/ThemeBinding.cs | 8 ++++++- .../Theming/ThemeBinding.cs.meta | 0 8 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 org.mixedrealitytoolkit.uxcore/Theming.meta create mode 100644 org.mixedrealitytoolkit.uxcore/Theming/AssemblyInfo.cs create mode 100644 org.mixedrealitytoolkit.uxcore/Theming/AssemblyInfo.cs.meta create mode 100644 org.mixedrealitytoolkit.uxcore/Theming/MRTK.UXCore.Theming.asmdef create mode 100644 org.mixedrealitytoolkit.uxcore/Theming/MRTK.UXCore.Theming.asmdef.meta rename {org.mixedrealitytoolkit.theming => org.mixedrealitytoolkit.uxcore}/Theming/ThemeBinding.cs (91%) rename {org.mixedrealitytoolkit.theming => org.mixedrealitytoolkit.uxcore}/Theming/ThemeBinding.cs.meta (100%) diff --git a/org.mixedrealitytoolkit.theming/README.md b/org.mixedrealitytoolkit.theming/README.md index 9220707cc..66f1f3d61 100644 --- a/org.mixedrealitytoolkit.theming/README.md +++ b/org.mixedrealitytoolkit.theming/README.md @@ -12,6 +12,9 @@ The system has three layers: | **Values** | `Theme` (ScriptableObject) | Provides a concrete value for every item in the definition | | **Binding** | `ThemeBinding` (MonoBehaviour) + binders | Connects a theme item to a specific component on a GameObject | +> [!NOTE] +> `ThemeBinding` exists in the UX Core package for cross-package compatibility. + --- ## Theme data source diff --git a/org.mixedrealitytoolkit.uxcore/Theming.meta b/org.mixedrealitytoolkit.uxcore/Theming.meta new file mode 100644 index 000000000..4de1b65ff --- /dev/null +++ b/org.mixedrealitytoolkit.uxcore/Theming.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3b4588601bed84d47965abae903e7c03 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.uxcore/Theming/AssemblyInfo.cs b/org.mixedrealitytoolkit.uxcore/Theming/AssemblyInfo.cs new file mode 100644 index 000000000..588a0bff2 --- /dev/null +++ b/org.mixedrealitytoolkit.uxcore/Theming/AssemblyInfo.cs @@ -0,0 +1,12 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using System.Reflection; + +[assembly: AssemblyProduct("Mixed Reality Toolkit UX Core Theming")] +[assembly: AssemblyCopyright("Copyright (c) Mixed Reality Toolkit Contributors")] + +// The AssemblyVersion attribute is checked-in and is recommended not to be changed often. +// https://docs.microsoft.com/troubleshoot/visualstudio/general/assembly-version-assembly-file-version +// AssemblyFileVersion and AssemblyInformationalVersion are added by pack-upm.ps1 to match the current MRTK build version. +[assembly: AssemblyVersion("4.0.0.0")] diff --git a/org.mixedrealitytoolkit.uxcore/Theming/AssemblyInfo.cs.meta b/org.mixedrealitytoolkit.uxcore/Theming/AssemblyInfo.cs.meta new file mode 100644 index 000000000..732d48a25 --- /dev/null +++ b/org.mixedrealitytoolkit.uxcore/Theming/AssemblyInfo.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: dca329abb86cbed439db681cb5c19650 \ No newline at end of file diff --git a/org.mixedrealitytoolkit.uxcore/Theming/MRTK.UXCore.Theming.asmdef b/org.mixedrealitytoolkit.uxcore/Theming/MRTK.UXCore.Theming.asmdef new file mode 100644 index 000000000..0e1ed8af8 --- /dev/null +++ b/org.mixedrealitytoolkit.uxcore/Theming/MRTK.UXCore.Theming.asmdef @@ -0,0 +1,23 @@ +{ + "name": "MixedReality.Toolkit.UXCore.Theming", + "rootNamespace": "MixedReality.Toolkit.UX", + "references": [ + "GUID:56255bd5d851a6243b63cb370cfc40b1", + "GUID:2238d58cada9b6746a548c6bff32c381" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "org.mixedrealitytoolkit.theming", + "expression": "", + "define": "MRTK_THEMING_PRESENT" + } + ], + "noEngineReferences": false +} \ No newline at end of file diff --git a/org.mixedrealitytoolkit.uxcore/Theming/MRTK.UXCore.Theming.asmdef.meta b/org.mixedrealitytoolkit.uxcore/Theming/MRTK.UXCore.Theming.asmdef.meta new file mode 100644 index 000000000..cc29fc63a --- /dev/null +++ b/org.mixedrealitytoolkit.uxcore/Theming/MRTK.UXCore.Theming.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9ec3d438d2c0eb94ca75bc73e75e1937 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Theming/ThemeBinding.cs b/org.mixedrealitytoolkit.uxcore/Theming/ThemeBinding.cs similarity index 91% rename from org.mixedrealitytoolkit.theming/Theming/ThemeBinding.cs rename to org.mixedrealitytoolkit.uxcore/Theming/ThemeBinding.cs index f90bbb333..590818d51 100644 --- a/org.mixedrealitytoolkit.theming/Theming/ThemeBinding.cs +++ b/org.mixedrealitytoolkit.uxcore/Theming/ThemeBinding.cs @@ -1,12 +1,17 @@ // Copyright (c) Mixed Reality Toolkit Contributors // Licensed under the BSD 3-Clause +#if MRTK_THEMING_PRESENT +using MixedReality.Toolkit.Theming; +#endif + using UnityEngine; -namespace MixedReality.Toolkit.Theming +namespace MixedReality.Toolkit.UX { public class ThemeBinding : MonoBehaviour { +#if MRTK_THEMING_PRESENT [SerializeField] [Tooltip("The theme data source manager.")] private ThemeDataSource themeDataSource; @@ -47,5 +52,6 @@ protected void OnDisable() binder?.Unsubscribe(themeDataSource); } } +#endif } } diff --git a/org.mixedrealitytoolkit.theming/Theming/ThemeBinding.cs.meta b/org.mixedrealitytoolkit.uxcore/Theming/ThemeBinding.cs.meta similarity index 100% rename from org.mixedrealitytoolkit.theming/Theming/ThemeBinding.cs.meta rename to org.mixedrealitytoolkit.uxcore/Theming/ThemeBinding.cs.meta From 0ece1457122ec2a60140f76f88fe21bcca8010f2 Mon Sep 17 00:00:00 2001 From: Kurtis Date: Thu, 21 May 2026 09:32:36 -0700 Subject: [PATCH 11/18] Updates to org.mixedrealitytoolkit.theming --- .../Binders/FontIconSetBinder.cs | 8 +- .../Editor/BaseThemeBinderDrawer.cs | 64 ++++++---- .../Editor/FontIconSetMapEditor.cs | 78 ++++++------ .../Editor/ThemeDataSourceEditor.cs | 11 +- .../Editor/ThemeEditor.cs | 111 +++++++++++------- .../ItemData/RectOffsetItemData.cs | 1 + .../Theming/Theme.cs | 17 +-- .../Theming/ThemeDataSource.cs | 4 +- 8 files changed, 175 insertions(+), 119 deletions(-) diff --git a/org.mixedrealitytoolkit.theming/Binders/FontIconSetBinder.cs b/org.mixedrealitytoolkit.theming/Binders/FontIconSetBinder.cs index 3755e8553..db211806f 100644 --- a/org.mixedrealitytoolkit.theming/Binders/FontIconSetBinder.cs +++ b/org.mixedrealitytoolkit.theming/Binders/FontIconSetBinder.cs @@ -13,7 +13,13 @@ public class FontIconSetBinder : BaseThemeBinder themeItemData) { - if (Target != null && Target.TextMeshProComponent != null && Target.IconSelector != null && themeItemData.Value.FontIconSet.GlyphIconsByName.ContainsKey(Target.IconSelector.CurrentIconName)) + if (Target != null && + Target.TextMeshProComponent != null && + Target.IconSelector != null && + Target.IconSelector.CurrentIconName != null && + themeItemData?.Value?.FontIconSet != null && + themeItemData.Value.FontIconSet.GlyphIconsByName != null && + themeItemData.Value.FontIconSet.GlyphIconsByName.ContainsKey(Target.IconSelector.CurrentIconName)) { // Clear the text to prevent missing character warnings when changing the font Target.TextMeshProComponent.text = string.Empty; diff --git a/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs b/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs index 31400edfb..fee83b751 100644 --- a/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs +++ b/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs @@ -18,18 +18,30 @@ public class BaseThemeBinderDrawer : PropertyDrawer private SerializedObject cachedDataSourceSerializedObject = null; private int cachedDataSourceInstanceID = 0; + private static readonly string ThemeDefinitionItemNameField = InspectorUIUtility.GetBackingField("ThemeDefinitionItemName"); + private static readonly Dictionary cachedLabels = new Dictionary(); + private static readonly Dictionary cachedValueTypes = new Dictionary(); + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { - label.text = label.text.Replace("Element", "Binder"); + if (label.text.StartsWith("Element")) + { + if (!cachedLabels.TryGetValue(label.text, out string cachedLabel)) + { + cachedLabel = label.text.Replace("Element", "Binder"); + cachedLabels[label.text] = cachedLabel; + } + label.text = cachedLabel; + } - SerializedProperty themeDataSourceProperty = FindThemeDataSourceProperty(property); + SerializedProperty themeDataSourceProperty = property.serializedObject.FindProperty("themeDataSource"); - List names = null; + string[] names = null; SerializedProperty themeDefinitionItemName = null; if (property.managedReferenceValue != null && themeDataSourceProperty != null && themeDataSourceProperty.objectReferenceValue != null) { - themeDefinitionItemName = property.FindPropertyRelative(InspectorUIUtility.GetBackingField("ThemeDefinitionItemName")); + themeDefinitionItemName = property.FindPropertyRelative(ThemeDefinitionItemNameField); // Rebuild the cached SerializedObject only when the referenced asset changes. int instanceID = themeDataSourceProperty.objectReferenceValue.GetInstanceID(); @@ -42,7 +54,7 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten cachedDataSourceSerializedObject.Update(); SerializedProperty themeDefinitionProperty = cachedDataSourceSerializedObject.FindProperty("themeDefinition"); - names = ParseThemeItems(themeDefinitionProperty.boxedValue as ThemeDefinition, (dynamic)property.managedReferenceValue); + names = ParseThemeItems(themeDefinitionProperty.boxedValue as ThemeDefinition, property.managedReferenceValue); } label = EditorGUI.BeginProperty(position, label, property); @@ -59,7 +71,7 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten // Draw the Bound Theme Item popup using the Rect API, within the allocated position. if (names != null && property.isExpanded) { - int selected = names.IndexOf(themeDefinitionItemName.stringValue); + int selected = System.Array.IndexOf(names, themeDefinitionItemName.stringValue); // Child fields are indented 15px from position.x. Unity's label/control // split is at position.x + labelWidth, so the label width is (labelWidth - 15f) @@ -74,17 +86,13 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten using (var check = new EditorGUI.ChangeCheckScope()) { EditorGUI.LabelField(labelRect, "Bound Theme Item"); - selected = EditorGUI.Popup(controlRect, selected, System.Array.ConvertAll(names.ToArray(), n => new GUIContent(n))); + selected = EditorGUI.Popup(controlRect, selected, names); if (check.changed) { themeDefinitionItemName.stringValue = names[selected]; } } } - else if (themeDefinitionItemName != null && names == null) - { - themeDefinitionItemName.stringValue = null; - } EditorGUI.EndProperty(); @@ -98,7 +106,7 @@ public override float GetPropertyHeight(SerializedProperty property, GUIContent // Add a line for the Bound Theme Item popup when the foldout is expanded and a data source is available. if (property.isExpanded && property.managedReferenceValue != null) { - SerializedProperty themeDataSourceProperty = FindThemeDataSourceProperty(property); + SerializedProperty themeDataSourceProperty = property.serializedObject.FindProperty("themeDataSource"); if (themeDataSourceProperty != null && themeDataSourceProperty.objectReferenceValue != null) { height += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; @@ -108,17 +116,27 @@ public override float GetPropertyHeight(SerializedProperty property, GUIContent return height; } - private static SerializedProperty FindThemeDataSourceProperty(SerializedProperty property) + private string[] ParseThemeItems(ThemeDefinition themeDefinition, object binder) { - string path = property.propertyPath; - string parentPath = path.Substring(0, path.LastIndexOf(path.Contains(".Array.data[") ? ".Array.data[" : ".")); - SerializedProperty parentProperty = property.serializedObject.FindProperty(parentPath); - return parentProperty?.serializedObject.FindProperty("themeDataSource"); - } + if (themeDefinition == null || themeDefinition.ThemeDefinitionItems == null || binder == null) + { + return null; + } - private List ParseThemeItems(ThemeDefinition themeDefinition, BaseThemeBinder _) - { - if (themeDefinition == null || themeDefinition.ThemeDefinitionItems == null) + System.Type binderType = binder.GetType(); + if (!cachedValueTypes.TryGetValue(binderType, out System.Type valueType)) + { + System.Type baseBinderType = binderType; + while (baseBinderType != null && (!baseBinderType.IsGenericType || baseBinderType.GetGenericTypeDefinition() != typeof(BaseThemeBinder<,>))) + { + baseBinderType = baseBinderType.BaseType; + } + + valueType = baseBinderType?.GenericTypeArguments[0]; + cachedValueTypes[binderType] = valueType; + } + + if (valueType == null) { return null; } @@ -131,13 +149,13 @@ private List ParseThemeItems(ThemeDefinition themeDefinition, Base && item.DataType?.Type != null && item.DataType.Type.BaseType != null && item.DataType.Type.BaseType.GenericTypeArguments.Length > 0 - && item.DataType.Type.BaseType.GenericTypeArguments[0].IsAssignableFrom(typeof(T))) + && item.DataType.Type.BaseType.GenericTypeArguments[0].IsAssignableFrom(valueType)) { matchingItemNames.Add(item.Name); } } - return matchingItemNames; + return matchingItemNames.Count > 0 ? matchingItemNames.ToArray() : null; } } } diff --git a/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs b/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs index 9bd0c8865..9fa83f073 100644 --- a/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs +++ b/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs @@ -4,7 +4,6 @@ using MixedReality.Toolkit.Editor; using MixedReality.Toolkit.UX; using System.Collections.Generic; -using System.Linq; using UnityEditor; using UnityEngine; @@ -20,6 +19,11 @@ public class FontIconSetMapEditor : UnityEditor.Editor private bool editToggled = false; private List foldoutStates = new(); + // Deferred State Variables + private FontIconSet pendingIconSet = null; + private string pendingIconToRenameOld = null; + private string pendingIconToRenameNew = null; + public void OnEnable() { setDefinitionProperty = serializedObject.FindProperty("setDefinition"); @@ -33,6 +37,18 @@ public void OnEnable() public override void OnInspectorGUI() { + if (Event.current.type == EventType.Layout) + { + if (pendingIconSet != null && pendingIconToRenameOld != null && pendingIconToRenameNew != null) + { + pendingIconSet.UpdateIconName(pendingIconToRenameOld, pendingIconToRenameNew); + EditorUtility.SetDirty(pendingIconSet); + pendingIconSet = null; + pendingIconToRenameOld = null; + pendingIconToRenameNew = null; + } + } + EditorGUILayout.PropertyField(setDefinitionProperty); EditorGUILayout.PropertyField(fontIconSetsProperty); editToggled = EditorGUILayout.Toggle("Edit Names", editToggled); @@ -41,7 +57,6 @@ public override void OnInspectorGUI() FontIconSetDefinition setDefinition = setDefinitionProperty.objectReferenceValue as FontIconSetDefinition; const int TileSize = 90; - List validNames = new List(); Dictionary> iconMatches = new Dictionary>(); for (int i = 0; i < fontIconSetsProperty.arraySize; i++) @@ -52,7 +67,7 @@ public override void OnInspectorGUI() continue; } - List> glyphs = iconSet.GlyphIconsByName.ToList(); + List> glyphs = new List>(iconSet.GlyphIconsByName); int column = 0; @@ -67,6 +82,13 @@ public override void OnInspectorGUI() if (foldoutStates[i] = EditorGUILayout.Foldout(foldoutStates[i], iconSet.name, true)) { + string[] availableNamesArray = null; + if (setDefinition != null && setDefinition.IconNames != null) + { + availableNamesArray = FontIconSetInspector.GetAvailableIconNames(iconSet, setDefinition); + FontIconSetInspector.DrawInvalidIconNameHelpBox(iconSet, setDefinition); + } + EditorGUILayout.BeginHorizontal(); foreach (KeyValuePair kv in glyphs) { @@ -83,38 +105,11 @@ public override void OnInspectorGUI() EditorGUI.DrawRect(textureRect, new Color(0f, 0f, 0f, 0.1f)); FontIconSetInspector.EditorDrawTMPGlyph(textureRect, kv.Value, iconSet.IconFontAsset); - if (setDefinition != null && setDefinition.IconNames != null) + if (availableNamesArray != null && FontIconSetInspector.DrawIconNamePopup(kv.Key, availableNamesArray, setDefinition.IconNames, TileSize, out string newName)) { - validNames.Clear(); - validNames.Add(kv.Key); - foreach (string name in setDefinition.IconNames) - { - if (!iconSet.GlyphIconsByName.Keys.Contains(name)) - { - validNames.Add(name); - } - } - - validNames.Sort(); - string[] validNamesArray = validNames.ToArray(); - - using (var check = new EditorGUI.ChangeCheckScope()) - { - int selected = validNames.IndexOf(kv.Key); - // If the currently selected name isn't in our icon set map names, highlight the popup - Color oldColor = GUI.backgroundColor; - if (!validNames.Contains(kv.Key)) - { - GUI.backgroundColor = Color.yellow; - } - selected = EditorGUILayout.Popup(string.Empty, selected, validNamesArray, GUILayout.MaxWidth(TileSize)); - if (check.changed) - { - iconSet.UpdateIconName(kv.Key, validNamesArray[selected]); - EditorUtility.SetDirty(iconSet); - } - GUI.backgroundColor = oldColor; - } + pendingIconSet = iconSet; + pendingIconToRenameOld = kv.Key; + pendingIconToRenameNew = newName; } EditorGUILayout.EndVertical(); @@ -127,7 +122,6 @@ public override void OnInspectorGUI() } else { - glyphs.Sort((pair1, pair2) => pair1.Key.CompareTo(pair2.Key)); foreach (KeyValuePair kv in glyphs) { if (iconMatches.TryGetValue(kv.Key, out List icons)) @@ -144,13 +138,19 @@ public override void OnInspectorGUI() if (!editToggled) { - foreach (KeyValuePair> kv in iconMatches) + // Sort the matched keys so the icons display in a predictable alphabetical order. + List sortedKeys = new List(iconMatches.Keys); + sortedKeys.Sort(); + + foreach (string key in sortedKeys) { + List icons = iconMatches[key]; + if (setDefinition != null && setDefinition.IconNames != null) { EditorGUILayout.BeginVertical(); - EditorGUILayout.LabelField(kv.Key, EditorStyles.boldLabel); + EditorGUILayout.LabelField(key, EditorStyles.boldLabel); EditorGUILayout.BeginHorizontal(); @@ -160,9 +160,9 @@ public override void OnInspectorGUI() Rect iconRect = GUILayoutUtility.GetRect(TileSize, TileSize, GUI.skin.box); EditorGUI.DrawRect(iconRect, new Color(0f, 0f, 0f, 0.1f)); - if (kv.Value.Contains(iconSet)) + if (icons.Contains(iconSet)) { - FontIconSetInspector.EditorDrawTMPGlyph(iconRect, iconSet.GlyphIconsByName[kv.Key], iconSet.IconFontAsset); + FontIconSetInspector.EditorDrawTMPGlyph(iconRect, iconSet.GlyphIconsByName[key], iconSet.IconFontAsset); } } diff --git a/org.mixedrealitytoolkit.theming/Editor/ThemeDataSourceEditor.cs b/org.mixedrealitytoolkit.theming/Editor/ThemeDataSourceEditor.cs index 69ab3cf4d..48f1b7b0c 100644 --- a/org.mixedrealitytoolkit.theming/Editor/ThemeDataSourceEditor.cs +++ b/org.mixedrealitytoolkit.theming/Editor/ThemeDataSourceEditor.cs @@ -24,9 +24,16 @@ public override void OnInspectorGUI() EditorGUILayout.PropertyField(iterator, true); - if (iterator.name == "activeTheme" && iterator.boxedValue is Theme theme && theme.Definition != serializedObject.targetObject) + if (iterator.name == "activeTheme" && iterator.objectReferenceValue is Theme theme) { - EditorGUILayout.HelpBox($"Assigned theme's definition ({theme.Definition.name}) does not match this data source's active definition ({serializedObject.targetObject.name}).\nThis will lead to undefined behavior at runtime.", MessageType.Error); + SerializedProperty definitionProp = serializedObject.FindProperty("themeDefinition"); + UnityEngine.Object activeDefinition = definitionProp?.objectReferenceValue; + + if (theme.Definition != activeDefinition) + { + EditorGUILayout.HelpBox($"Assigned theme's definition ({(theme.Definition != null ? theme.Definition.name : "null")}) does not match this data source's " + + $"active definition ({(activeDefinition != null ? activeDefinition.name : "null")}).\nThis will lead to undefined behavior at runtime.", MessageType.Error); + } } } diff --git a/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs b/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs index 4546085b2..5928964fe 100644 --- a/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs +++ b/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs @@ -19,6 +19,12 @@ public class ThemeEditor : UnityEditor.Editor private static bool itemsFoldout = false; + private static readonly string ThemeDefinitionItemsField = InspectorUIUtility.GetBackingField(nameof(ThemeDefinition.ThemeDefinitionItems)); + private static readonly string NameField = InspectorUIUtility.GetBackingField(nameof(ThemeDefinition.ThemeDefinitionItem.Name)); + private static readonly string DataTypeField = InspectorUIUtility.GetBackingField(nameof(ThemeDefinition.ThemeDefinitionItem.DataType)); + private static readonly string DataField = InspectorUIUtility.GetBackingField(nameof(Theme.ThemeItem.Data)); + private static readonly string ValueField = InspectorUIUtility.GetBackingField(nameof(BaseThemeItemData.Value)); + protected void OnEnable() { themeDefinitionProp = serializedObject.FindProperty("definition"); @@ -53,65 +59,33 @@ public override void OnInspectorGUI() SerializedProperty themeDefinitionArrayProp = themeDefinitionSerializedObject != null ? themeDefinitionSerializedObject .FindProperty("themeDefinition") - .FindPropertyRelative(InspectorUIUtility.GetBackingField(nameof(ThemeDefinition.ThemeDefinitionItems))) + .FindPropertyRelative(ThemeDefinitionItemsField) : null; - if (themeDefinitionArrayProp != null) + if (themeDefinitionArrayProp != null && themeItemsProp != null) { itemsFoldout = EditorGUILayout.Foldout(itemsFoldout, "Theme Values", true); if (itemsFoldout) { + if (Event.current.type == EventType.Layout) + { + ReconcileThemeItems(themeDefinitionArrayProp, themeItemsProp); + } + using (new EditorGUI.IndentLevelScope()) { - for (int i = 0; i < themeDefinitionArrayProp.arraySize; i++) + for (int i = 0; i < themeItemsProp.arraySize; i++) { - SerializedProperty themeDefinitionItem = themeDefinitionArrayProp.GetArrayElementAtIndex(i); - string themeDefinitionItemName = themeDefinitionItem.FindPropertyRelative(InspectorUIUtility.GetBackingField(nameof(ThemeDefinition.ThemeDefinitionItem.Name))).stringValue; - - SerializedProperty themeItem = themeItemsProp.arraySize > i ? themeItemsProp.GetArrayElementAtIndex(i) : null; - if (themeItem == null - || themeItem.FindPropertyRelative(InspectorUIUtility.GetBackingField(nameof(Theme.ThemeItem.Name))).stringValue != themeDefinitionItemName) - { - // Search for an existing item with the matching name further in the list, - // so we can move it into position rather than discarding its saved values. - int existingIndex = -1; - for (int j = i + 1; j < themeItemsProp.arraySize; j++) - { - string existingName = themeItemsProp.GetArrayElementAtIndex(j) - .FindPropertyRelative(InspectorUIUtility.GetBackingField(nameof(Theme.ThemeItem.Name))) - .stringValue; - if (existingName == themeDefinitionItemName) - { - existingIndex = j; - break; - } - } - - if (existingIndex >= 0) - { - // Move the found item up to position i, preserving its saved values. - themeItemsProp.MoveArrayElement(existingIndex, i); - } - else - { - // No existing item found — insert a fresh one with default values. - string valueDataType = themeDefinitionItem.FindPropertyRelative(InspectorUIUtility.GetBackingField(nameof(ThemeDefinition.ThemeDefinitionItem.DataType))).FindPropertyRelative("reference").stringValue; - - themeItemsProp.InsertArrayElementAtIndex(i); - themeItem = themeItemsProp.GetArrayElementAtIndex(i); - themeItem.managedReferenceValue = new Theme.ThemeItem(themeDefinitionItemName, Activator.CreateInstance(Type.GetType(valueDataType))); - } - } - SerializedProperty themeItemProp = themeItemsProp.GetArrayElementAtIndex(i); - SerializedProperty dataProp = themeItemProp.FindPropertyRelative(InspectorUIUtility.GetBackingField(nameof(Theme.ThemeItem.Data))); - SerializedProperty valueProp = dataProp?.FindPropertyRelative(InspectorUIUtility.GetBackingField(nameof(BaseThemeItemData.Value))); + SerializedProperty dataProp = themeItemProp.FindPropertyRelative(DataField); + SerializedProperty valueProp = dataProp?.FindPropertyRelative(ValueField); if (valueProp != null) { // Draw just the Value field, labelled with the item name, // skipping the intermediate "Data" foldout entirely. - EditorGUILayout.PropertyField(valueProp, new GUIContent(themeDefinitionItemName), true); + string themeItemName = themeItemProp.FindPropertyRelative(NameField).stringValue; + EditorGUILayout.PropertyField(valueProp, new GUIContent(themeItemName), true); } else { @@ -122,10 +96,57 @@ public override void OnInspectorGUI() } } } - themeItemsProp.arraySize = themeDefinitionArrayProp.arraySize; } serializedObject.ApplyModifiedProperties(); } + + private void ReconcileThemeItems(SerializedProperty themeDefinitionArrayProp, SerializedProperty themeItemsProp) + { + for (int i = 0; i < themeDefinitionArrayProp.arraySize; i++) + { + SerializedProperty themeDefinitionItem = themeDefinitionArrayProp.GetArrayElementAtIndex(i); + string themeDefinitionItemName = themeDefinitionItem.FindPropertyRelative(NameField).stringValue; + + SerializedProperty themeItem = themeItemsProp.arraySize > i ? themeItemsProp.GetArrayElementAtIndex(i) : null; + if (themeItem == null + || themeItem.FindPropertyRelative(NameField).stringValue != themeDefinitionItemName) + { + // Search for an existing item with the matching name further in the list, + // so we can move it into position rather than discarding its saved values. + int existingIndex = -1; + for (int j = i + 1; j < themeItemsProp.arraySize; j++) + { + string existingName = themeItemsProp.GetArrayElementAtIndex(j) + .FindPropertyRelative(NameField) + .stringValue; + if (existingName == themeDefinitionItemName) + { + existingIndex = j; + break; + } + } + + if (existingIndex >= 0) + { + // Move the found item up to position i, preserving its saved values. + themeItemsProp.MoveArrayElement(existingIndex, i); + } + else + { + // No existing item found — insert a fresh one with default values. + string valueDataType = themeDefinitionItem.FindPropertyRelative(DataTypeField).FindPropertyRelative("reference").stringValue; + + themeItemsProp.InsertArrayElementAtIndex(i); + themeItem = themeItemsProp.GetArrayElementAtIndex(i); + + Type dataType = Type.GetType(valueDataType); + object dataInstance = dataType != null ? Activator.CreateInstance(dataType) : null; + themeItem.managedReferenceValue = new Theme.ThemeItem(themeDefinitionItemName, dataInstance); + } + } + } + themeItemsProp.arraySize = themeDefinitionArrayProp.arraySize; + } } } diff --git a/org.mixedrealitytoolkit.theming/ItemData/RectOffsetItemData.cs b/org.mixedrealitytoolkit.theming/ItemData/RectOffsetItemData.cs index fa1892902..5d91ee98d 100644 --- a/org.mixedrealitytoolkit.theming/ItemData/RectOffsetItemData.cs +++ b/org.mixedrealitytoolkit.theming/ItemData/RectOffsetItemData.cs @@ -5,5 +5,6 @@ namespace MixedReality.Toolkit.Theming { + [System.Serializable] public class RectOffsetItemData : BaseThemeItemData { } } diff --git a/org.mixedrealitytoolkit.theming/Theming/Theme.cs b/org.mixedrealitytoolkit.theming/Theming/Theme.cs index d368314af..ddb503f17 100644 --- a/org.mixedrealitytoolkit.theming/Theming/Theme.cs +++ b/org.mixedrealitytoolkit.theming/Theming/Theme.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using UnityEngine; -using UnityEngine.Serialization; namespace MixedReality.Toolkit.Theming { @@ -14,7 +13,8 @@ namespace MixedReality.Toolkit.Theming [CreateAssetMenu(fileName = "Theme", menuName = "MRTK/Theming/Theme", order = 0)] public class Theme : ScriptableObject { - [SerializeField, FormerlySerializedAs("k__BackingField")] + [SerializeField] + [Tooltip("The schema that this theme conforms to. Every theme item must map to an item defined here.")] private ThemeDataSource definition; /// @@ -24,7 +24,7 @@ public class Theme : ScriptableObject [SerializeReference] [Tooltip("The items defining this theme's data mapped to the definition's items.")] - private List themeItems; + private List themeItems = new List(); /// /// Attempts to retrieve the data for a specific theme item by its name and expected type. @@ -35,12 +35,15 @@ public class Theme : ScriptableObject /// if an item with the specified name and type is found; otherwise, . public bool TryGetItemData(string itemName, out T itemValue) { - foreach (var themeItem in themeItems) + if (themeItems != null) { - if (themeItem.Name == itemName && themeItem.Data is T themeItemData) + foreach (var themeItem in themeItems) { - itemValue = themeItemData; - return true; + if (themeItem.Name == itemName && themeItem.Data is T themeItemData) + { + itemValue = themeItemData; + return true; + } } } diff --git a/org.mixedrealitytoolkit.theming/Theming/ThemeDataSource.cs b/org.mixedrealitytoolkit.theming/Theming/ThemeDataSource.cs index c69f2243a..135507946 100644 --- a/org.mixedrealitytoolkit.theming/Theming/ThemeDataSource.cs +++ b/org.mixedrealitytoolkit.theming/Theming/ThemeDataSource.cs @@ -27,9 +27,9 @@ public Theme value get => activeTheme; set { - if (value != null && value.Definition != this) + if (value != null && value.Definition != null && value.Definition != this) { - Debug.LogError($"New theme's definition ({value.Definition.name}) does not match this data source's active definition ({name})"); + Debug.LogError($"New theme's definition ({value.Definition.name}) does not match this data source ({name})"); } using (ChangeEvent changeEvent = ChangeEvent.GetPooled(activeTheme, value)) From 6aaea106fb8bf9b5c1378a36e54c5dbd8cf53333 Mon Sep 17 00:00:00 2001 From: Kurtis Date: Thu, 21 May 2026 10:41:05 -0700 Subject: [PATCH 12/18] Updates to org.mixedrealitytoolkit.uxcore --- .../FontIconSet/FontIconSelectorInspector.cs | 9 +- .../FontIconSet/FontIconSetInspector.cs | 153 +++++++++++++----- .../StateVisualizer/StateVisualizer.cs | 3 + .../Theming/ThemeBinding.cs | 40 +++-- 4 files changed, 150 insertions(+), 55 deletions(-) diff --git a/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSelectorInspector.cs b/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSelectorInspector.cs index 9b0fc0433..f1938bdfd 100644 --- a/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSelectorInspector.cs +++ b/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSelectorInspector.cs @@ -2,6 +2,7 @@ // Licensed under the BSD 3-Clause using MixedReality.Toolkit.UX; +using System.Collections.Generic; using TMPro; using UnityEditor; using UnityEngine; @@ -116,9 +117,13 @@ public void DrawIconGrid(FontIconSelector fontIconSelector, float tileSize) scrollAmount = EditorGUILayout.BeginScrollView(scrollAmount, GUILayout.MaxHeight(128), GUILayout.MinHeight(64)); EditorGUILayout.BeginHorizontal(); - foreach (string iconName in fontIconSet.GlyphIconsByName.Keys) + List> sortedIcons = new List>(fontIconSet.GlyphIconsByName); + sortedIcons.Sort((a, b) => a.Key.CompareTo(b.Key)); + + foreach (KeyValuePair kvp in sortedIcons) { - uint unicodeValue = fontIconSet.GlyphIconsByName[iconName]; + string iconName = kvp.Key; + uint unicodeValue = kvp.Value; if (column >= numColumns) { diff --git a/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSetInspector.cs b/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSetInspector.cs index 42bb97875..63a10a0b4 100644 --- a/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSetInspector.cs +++ b/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSetInspector.cs @@ -38,7 +38,6 @@ public class FontIconSetInspector : UnityEditor.Editor private List> iconEntries = new List>(); private List validNames = new List(); - private List availableNames = new List(); private HashSet selectedUnicodeValues = new HashSet(); private string[] availableNamesArray = Array.Empty(); private bool requiresUpdate = false; @@ -104,7 +103,6 @@ private void UpdateIconEntries() iconEntries.Sort((a, b) => a.Key.CompareTo(b.Key)); validNames.Clear(); - availableNames.Clear(); if (fontIconSetDefinitionProp != null) { @@ -114,16 +112,18 @@ private void UpdateIconEntries() foreach (string name in setDefinition.IconNames) { validNames.Add(name); - if (!fontIconSet.GlyphIconsByName.ContainsKey(name)) - { - availableNames.Add(name); - } } + availableNamesArray = GetAvailableIconNames(fontIconSet, setDefinition); + } + else + { + availableNamesArray = new string[] { string.Empty }; } } - availableNames.Sort(); - availableNames.Insert(0, string.Empty); - availableNamesArray = availableNames.ToArray(); + else + { + availableNamesArray = new string[] { string.Empty }; + } Repaint(); } @@ -234,20 +234,7 @@ public override void OnInspectorGUI() } else { - bool hasInvalidName = false; - foreach (KeyValuePair entry in iconEntries) - { - if (!validNames.Contains(entry.Value)) - { - hasInvalidName = true; - break; - } - } - - if (hasInvalidName) - { - EditorGUILayout.HelpBox("Icon names highlighted yellow are not present in the selected Font Icon Set Definition and should be updated.", MessageType.Warning); - } + DrawInvalidIconNameHelpBox(fontIconSet, setDefinition); // Catch edge cases where the external asset size changes while this inspector is still focused if (setDefinition.IconNames != null && validNames.Count != setDefinition.IconNames.Count) @@ -283,24 +270,10 @@ public override void OnInspectorGUI() if (fontIconSetDefinitionProp.objectReferenceValue != null) { - // Place the current icon's name in the array - availableNamesArray[0] = iconEntry.Value; - - using (var check = new EditorGUI.ChangeCheckScope()) + if (DrawIconNamePopup(iconEntry.Value, availableNamesArray, validNames, ButtonDimension, out string newName)) { - // If the currently selected name isn't in our icon set map names, highlight the popup - Color oldColor = GUI.backgroundColor; - if (!validNames.Contains(iconEntry.Value)) - { - GUI.backgroundColor = Color.yellow; - } - int selected = EditorGUILayout.Popup(string.Empty, 0, availableNamesArray, GUILayout.MaxWidth(ButtonDimension)); - if (check.changed) - { - pendingIconToRenameNew = availableNamesArray[selected]; - pendingIconToRenameOld = iconEntry.Value; - } - GUI.backgroundColor = oldColor; + pendingIconToRenameNew = newName; + pendingIconToRenameOld = iconEntry.Value; } } else @@ -434,6 +407,106 @@ private bool CheckIfHoloLensIconFontExists() return false; } + /// + /// Generates an array of available icon names (those present in the definition but not yet assigned in the icon set), + /// with an empty string at index 0 to act as a placeholder for the currently selected icon name. + /// + public static string[] GetAvailableIconNames(FontIconSet iconSet, FontIconSetDefinition setDefinition) + { + if (iconSet == null || setDefinition == null || setDefinition.IconNames == null) + { + return null; + } + + List availableNames = new List(); + foreach (string name in setDefinition.IconNames) + { + if (!iconSet.GlyphIconsByName.ContainsKey(name)) + { + availableNames.Add(name); + } + } + availableNames.Sort(); + availableNames.Insert(0, string.Empty); + return availableNames.ToArray(); + } + + /// + /// Draws a warning HelpBox if the provided contains assigned icon names that are not present in the . + /// + public static void DrawInvalidIconNameHelpBox(FontIconSet iconSet, FontIconSetDefinition setDefinition) + { + if (iconSet == null || setDefinition == null || setDefinition.IconNames == null) + { + return; + } + + foreach (string assignedName in iconSet.GlyphIconsByName.Keys) + { + bool isNameValid = false; + foreach (string validName in setDefinition.IconNames) + { + if (validName == assignedName) + { + isNameValid = true; + break; + } + } + + if (!isNameValid) + { + EditorGUILayout.HelpBox("Icon names highlighted yellow are not present in the selected Font Icon Set Definition and should be updated.", MessageType.Warning); + return; + } + } + } + + /// + /// Draws a popup for renaming an icon, highlighting it yellow if the name is invalid/missing from the definition. + /// + public static bool DrawIconNamePopup(string currentName, string[] availableNamesArray, IEnumerable validNames, float maxWidth, out string newName) + { + newName = currentName; + if (availableNamesArray == null || availableNamesArray.Length == 0) + { + return false; + } + + availableNamesArray[0] = currentName; + + bool changed = false; + using (var check = new EditorGUI.ChangeCheckScope()) + { + Color oldColor = GUI.backgroundColor; + + bool isNameValid = false; + foreach (string validName in validNames) + { + if (validName == currentName) + { + isNameValid = true; + break; + } + } + + if (!isNameValid) + { + GUI.backgroundColor = Color.yellow; + } + + int selected = EditorGUILayout.Popup(string.Empty, 0, availableNamesArray, GUILayout.MaxWidth(maxWidth)); + if (check.changed) + { + newName = availableNamesArray[selected]; + changed = true; + } + + GUI.backgroundColor = oldColor; + } + + return changed; + } + /// /// Draws a Text Mesh Pro glyph in the supplied . /// diff --git a/org.mixedrealitytoolkit.uxcore/StateVisualizer/StateVisualizer.cs b/org.mixedrealitytoolkit.uxcore/StateVisualizer/StateVisualizer.cs index 738f256b5..6bd0a721e 100644 --- a/org.mixedrealitytoolkit.uxcore/StateVisualizer/StateVisualizer.cs +++ b/org.mixedrealitytoolkit.uxcore/StateVisualizer/StateVisualizer.cs @@ -431,6 +431,9 @@ public bool TrySetStateTintColor(string stateName, UnityEngine.Object tintTarget } /// + /// Adds the provided effect to the state with name . + /// Creates the state if it doesn't exist. + /// /// The name of the state to add the effect to. /// The effect to add. internal void AddEffect(string stateName, IEffect effect) diff --git a/org.mixedrealitytoolkit.uxcore/Theming/ThemeBinding.cs b/org.mixedrealitytoolkit.uxcore/Theming/ThemeBinding.cs index 590818d51..b07482816 100644 --- a/org.mixedrealitytoolkit.uxcore/Theming/ThemeBinding.cs +++ b/org.mixedrealitytoolkit.uxcore/Theming/ThemeBinding.cs @@ -18,7 +18,10 @@ public class ThemeBinding : MonoBehaviour [SerializeReference, InterfaceSelector] [Tooltip("The list of bound theme entries.")] - private IBinder[] binders; + private IBinder[] binders = System.Array.Empty(); + + private readonly System.Collections.Generic.List subscribedBinders = new System.Collections.Generic.List(); + private ThemeDataSource subscribedDataSource; protected void OnEnable() { @@ -28,28 +31,39 @@ protected void OnEnable() return; } - foreach (IBinder binder in binders) + subscribedDataSource = themeDataSource; + + if (binders != null) { - if (binder == null) + foreach (IBinder binder in binders) { - Debug.LogWarning($"{nameof(ThemeBinding)} on '{gameObject.name}' has a null binder entry.", this); - continue; - } + if (binder == null) + { + Debug.LogWarning($"{nameof(ThemeBinding)} on '{gameObject.name}' has a null binder entry.", this); + continue; + } - if (string.IsNullOrWhiteSpace(binder.ThemeDefinitionItemName)) - { - Debug.LogWarning($"{nameof(ThemeBinding)} on '{gameObject.name}' has a {binder.GetType().Name} with no theme item assigned.", this); - } + if (string.IsNullOrWhiteSpace(binder.ThemeDefinitionItemName)) + { + Debug.LogWarning($"{nameof(ThemeBinding)} on '{gameObject.name}' has a {binder.GetType().Name} with no theme item assigned.", this); + } - binder.Subscribe(themeDataSource); + binder.Subscribe(subscribedDataSource); + subscribedBinders.Add(binder); + } } } protected void OnDisable() { - foreach (IBinder binder in binders) + if (subscribedDataSource != null) { - binder?.Unsubscribe(themeDataSource); + foreach (IBinder binder in subscribedBinders) + { + binder?.Unsubscribe(subscribedDataSource); + } + subscribedBinders.Clear(); + subscribedDataSource = null; } } #endif From 1d8d42eac56c16b4b8adc2ad1912a740e1250e22 Mon Sep 17 00:00:00 2001 From: Kurtis Date: Thu, 21 May 2026 14:57:01 -0700 Subject: [PATCH 13/18] Return ThemeDefinition to being a ScriptableObject Easier sharing of schema --- .../Editor/BaseThemeBinderDrawer.cs | 34 +++--- .../Editor/ThemeDataSourceEditor.cs | 35 ++++-- .../Editor/ThemeEditor.cs | 84 +++++++-------- org.mixedrealitytoolkit.theming/README.md | 9 +- .../Theming/MRTK_Theming_DataSource.asset | 19 ++++ ...eta => MRTK_Theming_DataSource.asset.meta} | 0 .../MRTK_Theming_DefaultDefinition.asset | 96 +++++++++++++++++ .../MRTK_Theming_DefaultDefinition.asset.meta | 8 ++ .../Theming/Theme Data Source.asset | 101 ------------------ .../Theming/Theme.cs | 6 +- .../Theming/ThemeDataSource.cs | 6 +- .../Theming/ThemeDefinition.cs | 4 +- org.mixedrealitytoolkit.theming/package.json | 1 - 13 files changed, 217 insertions(+), 186 deletions(-) create mode 100644 org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_DataSource.asset rename org.mixedrealitytoolkit.theming/Theming/{Theme Data Source.asset.meta => MRTK_Theming_DataSource.asset.meta} (100%) create mode 100644 org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_DefaultDefinition.asset create mode 100644 org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_DefaultDefinition.asset.meta delete mode 100644 org.mixedrealitytoolkit.theming/Theming/Theme Data Source.asset diff --git a/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs b/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs index fee83b751..777899907 100644 --- a/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs +++ b/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs @@ -11,16 +11,12 @@ namespace MixedReality.Toolkit.Theming.Editor [CustomPropertyDrawer(typeof(BaseThemeBinder<,>), true)] public class BaseThemeBinderDrawer : PropertyDrawer { - // Cached SerializedObject for the ThemeDataSource asset. - // PropertyDrawer is instantiated per-type, not per-property, so multiple - // binders may reference different data source assets — we track the last seen - // asset and rebuild the cache only when it changes. - private SerializedObject cachedDataSourceSerializedObject = null; - private int cachedDataSourceInstanceID = 0; - - private static readonly string ThemeDefinitionItemNameField = InspectorUIUtility.GetBackingField("ThemeDefinitionItemName"); + private static string themeDefinitionItemNameField; + private static string ThemeDefinitionItemNameField => themeDefinitionItemNameField ??= InspectorUIUtility.GetBackingField("ThemeDefinitionItemName"); + private static readonly Dictionary cachedLabels = new Dictionary(); private static readonly Dictionary cachedValueTypes = new Dictionary(); + private static readonly List reusableMatchingItemNames = new List(); public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { @@ -39,22 +35,16 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten string[] names = null; SerializedProperty themeDefinitionItemName = null; - if (property.managedReferenceValue != null && themeDataSourceProperty != null && themeDataSourceProperty.objectReferenceValue != null) + // Only pay the cost of parsing available items when the property is actively expanded + if (property.isExpanded && property.managedReferenceValue != null && themeDataSourceProperty != null && themeDataSourceProperty.objectReferenceValue != null) { themeDefinitionItemName = property.FindPropertyRelative(ThemeDefinitionItemNameField); - // Rebuild the cached SerializedObject only when the referenced asset changes. - int instanceID = themeDataSourceProperty.objectReferenceValue.GetInstanceID(); - if (instanceID != cachedDataSourceInstanceID) + ThemeDataSource dataSource = themeDataSourceProperty.objectReferenceValue as ThemeDataSource; + if (dataSource != null) { - cachedDataSourceSerializedObject?.Dispose(); - cachedDataSourceSerializedObject = new SerializedObject(themeDataSourceProperty.objectReferenceValue); - cachedDataSourceInstanceID = instanceID; + names = ParseThemeItems(dataSource.Definition, property.managedReferenceValue); } - cachedDataSourceSerializedObject.Update(); - - SerializedProperty themeDefinitionProperty = cachedDataSourceSerializedObject.FindProperty("themeDefinition"); - names = ParseThemeItems(themeDefinitionProperty.boxedValue as ThemeDefinition, property.managedReferenceValue); } label = EditorGUI.BeginProperty(position, label, property); @@ -141,7 +131,7 @@ private string[] ParseThemeItems(ThemeDefinition themeDefinition, object binder) return null; } - List matchingItemNames = new(); + reusableMatchingItemNames.Clear(); foreach (ThemeDefinition.ThemeDefinitionItem item in themeDefinition.ThemeDefinitionItems) { @@ -151,11 +141,11 @@ private string[] ParseThemeItems(ThemeDefinition themeDefinition, object binder) && item.DataType.Type.BaseType.GenericTypeArguments.Length > 0 && item.DataType.Type.BaseType.GenericTypeArguments[0].IsAssignableFrom(valueType)) { - matchingItemNames.Add(item.Name); + reusableMatchingItemNames.Add(item.Name); } } - return matchingItemNames.Count > 0 ? matchingItemNames.ToArray() : null; + return reusableMatchingItemNames.Count > 0 ? reusableMatchingItemNames.ToArray() : null; } } } diff --git a/org.mixedrealitytoolkit.theming/Editor/ThemeDataSourceEditor.cs b/org.mixedrealitytoolkit.theming/Editor/ThemeDataSourceEditor.cs index 48f1b7b0c..3e331165b 100644 --- a/org.mixedrealitytoolkit.theming/Editor/ThemeDataSourceEditor.cs +++ b/org.mixedrealitytoolkit.theming/Editor/ThemeDataSourceEditor.cs @@ -8,6 +8,18 @@ namespace MixedReality.Toolkit.Theming.Editor [CustomEditor(typeof(ThemeDataSource), true)] public class ThemeDataSourceEditor : UnityEditor.Editor { + private UnityEditor.Editor themeDefinitionEditor = null; + private static bool themeDefinitionFoldout = false; + + protected void OnDisable() + { + if (themeDefinitionEditor != null) + { + DestroyImmediate(themeDefinitionEditor); + themeDefinitionEditor = null; + } + } + /// /// Called by the Unity editor to render custom inspector UI for this component. /// @@ -24,15 +36,26 @@ public override void OnInspectorGUI() EditorGUILayout.PropertyField(iterator, true); - if (iterator.name == "activeTheme" && iterator.objectReferenceValue is Theme theme) + if (iterator.name == "themeDefinition" && iterator.objectReferenceValue != null) { - SerializedProperty definitionProp = serializedObject.FindProperty("themeDefinition"); - UnityEngine.Object activeDefinition = definitionProp?.objectReferenceValue; + UnityEditor.Editor.CreateCachedEditor(iterator.objectReferenceValue, null, ref themeDefinitionEditor); - if (theme.Definition != activeDefinition) + themeDefinitionFoldout = EditorGUILayout.Foldout(themeDefinitionFoldout, "Definition Details", true); + if (themeDefinitionFoldout && themeDefinitionEditor != null) + { + using (new EditorGUI.IndentLevelScope()) + { + themeDefinitionEditor.OnInspectorGUI(); + } + } + } + + if (iterator.name == "activeTheme" && iterator.objectReferenceValue is Theme theme) + { + UnityEngine.Object activeDefinition = serializedObject.FindProperty("themeDefinition")?.objectReferenceValue; + if (theme.Definition != null && theme.Definition != activeDefinition) { - EditorGUILayout.HelpBox($"Assigned theme's definition ({(theme.Definition != null ? theme.Definition.name : "null")}) does not match this data source's " + - $"active definition ({(activeDefinition != null ? activeDefinition.name : "null")}).\nThis will lead to undefined behavior at runtime.", MessageType.Error); + EditorGUILayout.HelpBox($"Assigned theme's definition ({theme.Definition.name}) does not match this data source's definition ({(activeDefinition != null ? activeDefinition.name : "null")}).\nThis will lead to undefined behavior at runtime.", MessageType.Error); } } } diff --git a/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs b/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs index 5928964fe..a7dc1eab7 100644 --- a/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs +++ b/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs @@ -14,28 +14,20 @@ public class ThemeEditor : UnityEditor.Editor private SerializedProperty themeDefinitionProp = null; private SerializedProperty themeItemsProp = null; - private SerializedObject themeDefinitionSerializedObject = null; - private UnityEngine.Object cachedThemeDefinitionRef = null; - private static bool itemsFoldout = false; - private static readonly string ThemeDefinitionItemsField = InspectorUIUtility.GetBackingField(nameof(ThemeDefinition.ThemeDefinitionItems)); - private static readonly string NameField = InspectorUIUtility.GetBackingField(nameof(ThemeDefinition.ThemeDefinitionItem.Name)); - private static readonly string DataTypeField = InspectorUIUtility.GetBackingField(nameof(ThemeDefinition.ThemeDefinitionItem.DataType)); - private static readonly string DataField = InspectorUIUtility.GetBackingField(nameof(Theme.ThemeItem.Data)); - private static readonly string ValueField = InspectorUIUtility.GetBackingField(nameof(BaseThemeItemData.Value)); + private string nameField; + private string dataField; + private string valueField; protected void OnEnable() { themeDefinitionProp = serializedObject.FindProperty("definition"); themeItemsProp = serializedObject.FindProperty("themeItems"); - } - protected void OnDisable() - { - themeDefinitionSerializedObject?.Dispose(); - themeDefinitionSerializedObject = null; - cachedThemeDefinitionRef = null; + nameField = InspectorUIUtility.GetBackingField(nameof(ThemeDefinition.ThemeDefinitionItem.Name)); + dataField = InspectorUIUtility.GetBackingField(nameof(Theme.ThemeItem.Data)); + valueField = InspectorUIUtility.GetBackingField(nameof(BaseThemeItemData.Value)); } /// @@ -45,31 +37,16 @@ public override void OnInspectorGUI() { EditorGUILayout.PropertyField(themeDefinitionProp); - // Rebuild the cached SerializedObject if the referenced definition asset has changed. - if (themeDefinitionProp.objectReferenceValue != cachedThemeDefinitionRef) - { - themeDefinitionSerializedObject?.Dispose(); - cachedThemeDefinitionRef = themeDefinitionProp.objectReferenceValue; - themeDefinitionSerializedObject = cachedThemeDefinitionRef != null - ? new SerializedObject(cachedThemeDefinitionRef) - : null; - } - themeDefinitionSerializedObject?.Update(); - - SerializedProperty themeDefinitionArrayProp = themeDefinitionSerializedObject != null - ? themeDefinitionSerializedObject - .FindProperty("themeDefinition") - .FindPropertyRelative(ThemeDefinitionItemsField) - : null; + ThemeDefinition themeDefinition = themeDefinitionProp.objectReferenceValue as ThemeDefinition; - if (themeDefinitionArrayProp != null && themeItemsProp != null) + if (themeDefinition != null && themeDefinition.ThemeDefinitionItems != null && themeItemsProp != null) { itemsFoldout = EditorGUILayout.Foldout(itemsFoldout, "Theme Values", true); if (itemsFoldout) { if (Event.current.type == EventType.Layout) { - ReconcileThemeItems(themeDefinitionArrayProp, themeItemsProp); + ReconcileThemeItems(themeDefinition, themeItemsProp); } using (new EditorGUI.IndentLevelScope()) @@ -77,14 +54,14 @@ public override void OnInspectorGUI() for (int i = 0; i < themeItemsProp.arraySize; i++) { SerializedProperty themeItemProp = themeItemsProp.GetArrayElementAtIndex(i); - SerializedProperty dataProp = themeItemProp.FindPropertyRelative(DataField); - SerializedProperty valueProp = dataProp?.FindPropertyRelative(ValueField); + SerializedProperty dataProp = themeItemProp.FindPropertyRelative(dataField); + SerializedProperty valueProp = dataProp?.FindPropertyRelative(valueField); if (valueProp != null) { // Draw just the Value field, labelled with the item name, // skipping the intermediate "Data" foldout entirely. - string themeItemName = themeItemProp.FindPropertyRelative(NameField).stringValue; + string themeItemName = themeItemProp.FindPropertyRelative(nameField).stringValue; EditorGUILayout.PropertyField(valueProp, new GUIContent(themeItemName), true); } else @@ -101,16 +78,17 @@ public override void OnInspectorGUI() serializedObject.ApplyModifiedProperties(); } - private void ReconcileThemeItems(SerializedProperty themeDefinitionArrayProp, SerializedProperty themeItemsProp) + private void ReconcileThemeItems(ThemeDefinition themeDefinition, SerializedProperty themeItemsProp) { - for (int i = 0; i < themeDefinitionArrayProp.arraySize; i++) + var definitionItems = themeDefinition.ThemeDefinitionItems; + for (int i = 0; i < definitionItems.Length; i++) { - SerializedProperty themeDefinitionItem = themeDefinitionArrayProp.GetArrayElementAtIndex(i); - string themeDefinitionItemName = themeDefinitionItem.FindPropertyRelative(NameField).stringValue; + var definitionItem = definitionItems[i]; + string themeDefinitionItemName = definitionItem.Name; SerializedProperty themeItem = themeItemsProp.arraySize > i ? themeItemsProp.GetArrayElementAtIndex(i) : null; if (themeItem == null - || themeItem.FindPropertyRelative(NameField).stringValue != themeDefinitionItemName) + || themeItem.FindPropertyRelative(nameField).stringValue != themeDefinitionItemName) { // Search for an existing item with the matching name further in the list, // so we can move it into position rather than discarding its saved values. @@ -118,7 +96,7 @@ private void ReconcileThemeItems(SerializedProperty themeDefinitionArrayProp, Se for (int j = i + 1; j < themeItemsProp.arraySize; j++) { string existingName = themeItemsProp.GetArrayElementAtIndex(j) - .FindPropertyRelative(NameField) + .FindPropertyRelative(nameField) .stringValue; if (existingName == themeDefinitionItemName) { @@ -135,18 +113,34 @@ private void ReconcileThemeItems(SerializedProperty themeDefinitionArrayProp, Se else { // No existing item found — insert a fresh one with default values. - string valueDataType = themeDefinitionItem.FindPropertyRelative(DataTypeField).FindPropertyRelative("reference").stringValue; themeItemsProp.InsertArrayElementAtIndex(i); themeItem = themeItemsProp.GetArrayElementAtIndex(i); - Type dataType = Type.GetType(valueDataType); - object dataInstance = dataType != null ? Activator.CreateInstance(dataType) : null; + Type dataType = definitionItem.DataType?.Type; + object dataInstance = null; + + if (dataType != null) + { + try + { + dataInstance = Activator.CreateInstance(dataType); + } + catch (Exception e) + { + Debug.LogWarning($"Failed to instantiate data for ThemeItem '{themeDefinitionItemName}' (Type: {dataType.Name}). Falling back to null. Exception: {e.Message}"); + } + } + else + { + Debug.LogWarning($"Could not resolve DataType for ThemeItem '{themeDefinitionItemName}'. Falling back to null."); + } + themeItem.managedReferenceValue = new Theme.ThemeItem(themeDefinitionItemName, dataInstance); } } } - themeItemsProp.arraySize = themeDefinitionArrayProp.arraySize; + themeItemsProp.arraySize = definitionItems.Length; } } } diff --git a/org.mixedrealitytoolkit.theming/README.md b/org.mixedrealitytoolkit.theming/README.md index 66f1f3d61..58b69ce18 100644 --- a/org.mixedrealitytoolkit.theming/README.md +++ b/org.mixedrealitytoolkit.theming/README.md @@ -8,7 +8,8 @@ The system has three layers: | Layer | Asset / Component | Purpose | |---|---|---| -| **Schema** | `ThemeDataSource` + `ThemeDefinition` | Declares what named items exist and what type each one is | +| **Schema** | `ThemeDefinition` (ScriptableObject) | Declares what named items exist and what type each one is | +| **State** | `ThemeDataSource` (ScriptableObject) | The single source of truth for the currently active theme | | **Values** | `Theme` (ScriptableObject) | Provides a concrete value for every item in the definition | | **Binding** | `ThemeBinding` (MonoBehaviour) + binders | Connects a theme item to a specific component on a GameObject | @@ -26,13 +27,13 @@ A `ThemeDataSource` ScriptableObject is the single source of truth for which the The `ThemeDataSource` holds: - **`activeTheme`** — the currently applied `Theme` asset. -- **`themeDefinition`** — the schema that all compatible themes must conform to. +- **`themeDefinition`** — the `ThemeDefinition` asset (schema) that all compatible themes must conform to. To switch themes at runtime, assign a new `Theme` to `themeDataSource.value`. Every `ThemeBinding` component subscribed to that source will immediately receive and apply the new values. ### Theme definition -A `ThemeDefinition` is a list of named items, each with a declared data type. It acts as the contract between the `ThemeDataSource` and all `Theme` assets that reference it — every `Theme` must provide a value for every item in the definition. +A `ThemeDefinition` ScriptableObject is a list of named items, each with a declared data type. It acts as the contract between the `ThemeDataSource` and all `Theme` assets that reference it — every `Theme` must provide a value for every item in the definition. Each item has: @@ -45,7 +46,7 @@ Each item has: ## Theme -A `Theme` ScriptableObject is assigned to a `ThemeDataSource` and provides a concrete value for every item declared in that source's `ThemeDefinition`. +A `Theme` ScriptableObject is assigned to a `ThemeDataSource` and provides a concrete value for every item declared in its referenced `ThemeDefinition` schema. ![TextColorMapping](./Documentation~/Images/TextColorMapping.png) diff --git a/org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_DataSource.asset b/org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_DataSource.asset new file mode 100644 index 000000000..cc107dec7 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_DataSource.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3f1a7927806b6cc45a1ef33fc3f04465, type: 3} + m_Name: MRTK_Theming_DataSource + m_EditorClassIdentifier: + activeTheme: {fileID: 0} + onThemeChanged: + m_PersistentCalls: + m_Calls: [] + themeDefinition: {fileID: 11400000, guid: da6ba53b6d024604bbff6fa870ff4e4e, type: 2} diff --git a/org.mixedrealitytoolkit.theming/Theming/Theme Data Source.asset.meta b/org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_DataSource.asset.meta similarity index 100% rename from org.mixedrealitytoolkit.theming/Theming/Theme Data Source.asset.meta rename to org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_DataSource.asset.meta diff --git a/org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_DefaultDefinition.asset b/org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_DefaultDefinition.asset new file mode 100644 index 000000000..115e45c6d --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_DefaultDefinition.asset @@ -0,0 +1,96 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b6e110c23f5e404dbbfdc87cb47ff23, type: 3} + m_Name: MRTK_Theming_DefaultDefinition + m_EditorClassIdentifier: + k__BackingField: + - k__BackingField: Backplate Material + k__BackingField: + reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Non-Canvas Backplate (8mm) Material + k__BackingField: + reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Non-Canvas Backplate (10mm) Material + k__BackingField: + reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Non-Canvas Backplate (13mm) Material + k__BackingField: + reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Text Font + k__BackingField: + reference: MixedReality.Toolkit.Theming.TMP_FontAssetThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Icon Set + k__BackingField: + reference: MixedReality.Toolkit.Theming.FontIconSetItemData, MixedReality.Toolkit.Theming + - k__BackingField: MRTK Logo + k__BackingField: + reference: MixedReality.Toolkit.Theming.SpriteThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Canvas Backplate Quad Material + k__BackingField: + reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Panel Group Padding + k__BackingField: + reference: MixedReality.Toolkit.Theming.RectOffsetItemData, MixedReality.Toolkit.Theming + - k__BackingField: Button Corner Radius + k__BackingField: + reference: MixedReality.Toolkit.Theming.FloatItemData, MixedReality.Toolkit.Theming + - k__BackingField: Tab Indicator Material + k__BackingField: + reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Horizontal Tab Indicator Scale + k__BackingField: + reference: MixedReality.Toolkit.Theming.Vector3ItemData, MixedReality.Toolkit.Theming + - k__BackingField: Primary Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: On Primary Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Primary Container Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: On Primary Container Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Secondary Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: On Secondary Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Secondary Container Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: On Secondary Container Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Tertiary Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: On Tertiary Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Tertiary Container Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: On Tertiary Container Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Surface Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: On Surface Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming + - k__BackingField: Surface Container Color + k__BackingField: + reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming diff --git a/org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_DefaultDefinition.asset.meta b/org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_DefaultDefinition.asset.meta new file mode 100644 index 000000000..fc09641d3 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Theming/MRTK_Theming_DefaultDefinition.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: da6ba53b6d024604bbff6fa870ff4e4e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/org.mixedrealitytoolkit.theming/Theming/Theme Data Source.asset b/org.mixedrealitytoolkit.theming/Theming/Theme Data Source.asset deleted file mode 100644 index 9c19336f8..000000000 --- a/org.mixedrealitytoolkit.theming/Theming/Theme Data Source.asset +++ /dev/null @@ -1,101 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3f1a7927806b6cc45a1ef33fc3f04465, type: 3} - m_Name: Theme Data Source - m_EditorClassIdentifier: - activeTheme: {fileID: 0} - onThemeChanged: - m_PersistentCalls: - m_Calls: [] - themeDefinition: - k__BackingField: - - k__BackingField: Backplate Material - k__BackingField: - reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: Non-Canvas Backplate (8mm) Material - k__BackingField: - reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: Non-Canvas Backplate (10mm) Material - k__BackingField: - reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: Non-Canvas Backplate (13mm) Material - k__BackingField: - reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: Text Font - k__BackingField: - reference: MixedReality.Toolkit.Theming.TMP_FontAssetThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: Icon Set - k__BackingField: - reference: MixedReality.Toolkit.Theming.FontIconSetItemData, MixedReality.Toolkit.Theming - - k__BackingField: MRTK Logo - k__BackingField: - reference: MixedReality.Toolkit.Theming.SpriteThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: Canvas Backplate Quad Material - k__BackingField: - reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: Panel Group Padding - k__BackingField: - reference: MixedReality.Toolkit.Theming.RectOffsetItemData, MixedReality.Toolkit.Theming - - k__BackingField: Button Corner Radius - k__BackingField: - reference: MixedReality.Toolkit.Theming.FloatItemData, MixedReality.Toolkit.Theming - - k__BackingField: Tab Indicator Material - k__BackingField: - reference: MixedReality.Toolkit.Theming.MaterialThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: Horizontal Tab Indicator Scale - k__BackingField: - reference: MixedReality.Toolkit.Theming.Vector3ItemData, MixedReality.Toolkit.Theming - - k__BackingField: Primary Color - k__BackingField: - reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: On Primary Color - k__BackingField: - reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: Primary Container Color - k__BackingField: - reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: On Primary Container Color - k__BackingField: - reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: Secondary Color - k__BackingField: - reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: On Secondary Color - k__BackingField: - reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: Secondary Container Color - k__BackingField: - reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: On Secondary Container Color - k__BackingField: - reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: Tertiary Color - k__BackingField: - reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: On Tertiary Color - k__BackingField: - reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: Tertiary Container Color - k__BackingField: - reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: On Tertiary Container Color - k__BackingField: - reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: Surface Color - k__BackingField: - reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: On Surface Color - k__BackingField: - reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming - - k__BackingField: Surface Container Color - k__BackingField: - reference: MixedReality.Toolkit.Theming.ColorThemeItemData, MixedReality.Toolkit.Theming diff --git a/org.mixedrealitytoolkit.theming/Theming/Theme.cs b/org.mixedrealitytoolkit.theming/Theming/Theme.cs index ddb503f17..f369fcd3f 100644 --- a/org.mixedrealitytoolkit.theming/Theming/Theme.cs +++ b/org.mixedrealitytoolkit.theming/Theming/Theme.cs @@ -15,12 +15,12 @@ public class Theme : ScriptableObject { [SerializeField] [Tooltip("The schema that this theme conforms to. Every theme item must map to an item defined here.")] - private ThemeDataSource definition; + private ThemeDefinition definition; /// /// The schema that this theme conforms to. Every theme item must map to an item defined here. /// - public ThemeDataSource Definition => definition; + public ThemeDefinition Definition => definition; [SerializeReference] [Tooltip("The items defining this theme's data mapped to the definition's items.")] @@ -39,7 +39,7 @@ public bool TryGetItemData(string itemName, out T itemValue) { foreach (var themeItem in themeItems) { - if (themeItem.Name == itemName && themeItem.Data is T themeItemData) + if (themeItem != null && themeItem.Name == itemName && themeItem.Data is T themeItemData) { itemValue = themeItemData; return true; diff --git a/org.mixedrealitytoolkit.theming/Theming/ThemeDataSource.cs b/org.mixedrealitytoolkit.theming/Theming/ThemeDataSource.cs index 135507946..e99ec94f4 100644 --- a/org.mixedrealitytoolkit.theming/Theming/ThemeDataSource.cs +++ b/org.mixedrealitytoolkit.theming/Theming/ThemeDataSource.cs @@ -19,6 +19,8 @@ public class ThemeDataSource : ScriptableObject, INotifyValueChanged [SerializeField] private ThemeDefinition themeDefinition; + public ThemeDefinition Definition => themeDefinition; + #region INotifyValueChanged /// @@ -27,9 +29,9 @@ public Theme value get => activeTheme; set { - if (value != null && value.Definition != null && value.Definition != this) + if (value != null && value.Definition != null && value.Definition != themeDefinition) { - Debug.LogError($"New theme's definition ({value.Definition.name}) does not match this data source ({name})"); + Debug.LogError($"New theme's definition ({value.Definition.name}) does not match this data source's definition ({(themeDefinition != null ? themeDefinition.name : "null")})"); } using (ChangeEvent changeEvent = ChangeEvent.GetPooled(activeTheme, value)) diff --git a/org.mixedrealitytoolkit.theming/Theming/ThemeDefinition.cs b/org.mixedrealitytoolkit.theming/Theming/ThemeDefinition.cs index 855afd78c..037ec997f 100644 --- a/org.mixedrealitytoolkit.theming/Theming/ThemeDefinition.cs +++ b/org.mixedrealitytoolkit.theming/Theming/ThemeDefinition.cs @@ -6,8 +6,8 @@ namespace MixedReality.Toolkit.Theming { - [Serializable] - public class ThemeDefinition + [CreateAssetMenu(fileName = "Theme Definition", menuName = "MRTK/Theming/Theme Definition", order = 1)] + public class ThemeDefinition : ScriptableObject { [field: SerializeField] [Tooltip("The items defining the theme that can be bound to this source.")] diff --git a/org.mixedrealitytoolkit.theming/package.json b/org.mixedrealitytoolkit.theming/package.json index 825e925bc..e804a9e08 100644 --- a/org.mixedrealitytoolkit.theming/package.json +++ b/org.mixedrealitytoolkit.theming/package.json @@ -3,7 +3,6 @@ "version": "1.0.0-development.pre.1", "description": "Core theming scripts for building MR UI components. Intended to be consumed when building UX libraries. For pre-existing library of components, see the UX Components package.", "displayName": "MRTK UX Theming", - "msftFeatureCategory": "MRTK3", "author": "Mixed Reality Toolkit Contributors", "license": "BSD 3-Clause", "repository": { From a9b50df6417494fef9cd6509dfe23cb18f0841e8 Mon Sep 17 00:00:00 2001 From: Kurtis Date: Thu, 21 May 2026 15:31:24 -0700 Subject: [PATCH 14/18] Ensure invalid types are handled throughout the flow --- .../Editor/BaseThemeBinderDrawer.cs | 35 +++++--- .../Editor/FontIconSetMapEditor.cs | 2 + .../Editor/ThemeDefinitionEditor.cs | 39 +++++++++ .../Editor/ThemeDefinitionEditor.cs.meta | 2 + .../Editor/ThemeEditor.cs | 84 +++++++++++++------ .../FontIconSet/FontIconSelectorInspector.cs | 6 ++ 6 files changed, 129 insertions(+), 39 deletions(-) create mode 100644 org.mixedrealitytoolkit.theming/Editor/ThemeDefinitionEditor.cs create mode 100644 org.mixedrealitytoolkit.theming/Editor/ThemeDefinitionEditor.cs.meta diff --git a/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs b/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs index 777899907..9e51d9e7a 100644 --- a/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs +++ b/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs @@ -27,16 +27,17 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten cachedLabel = label.text.Replace("Element", "Binder"); cachedLabels[label.text] = cachedLabel; } - label.text = cachedLabel; + label = new GUIContent(label) { text = cachedLabel }; } SerializedProperty themeDataSourceProperty = property.serializedObject.FindProperty("themeDataSource"); string[] names = null; SerializedProperty themeDefinitionItemName = null; + bool hasDataSource = themeDataSourceProperty != null && themeDataSourceProperty.objectReferenceValue != null; // Only pay the cost of parsing available items when the property is actively expanded - if (property.isExpanded && property.managedReferenceValue != null && themeDataSourceProperty != null && themeDataSourceProperty.objectReferenceValue != null) + if (property.isExpanded && property.managedReferenceValue != null && hasDataSource) { themeDefinitionItemName = property.FindPropertyRelative(ThemeDefinitionItemNameField); @@ -51,7 +52,7 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten // Draw the foldout and all child properties within the allocated rect. Rect propertyRect = position; - if (names != null) + if (hasDataSource) { // Reserve the last line for the Bound Theme Item popup when expanded. propertyRect.height -= property.isExpanded ? EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing : 0; @@ -59,10 +60,8 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten EditorGUI.PropertyField(propertyRect, property, label, true); // Draw the Bound Theme Item popup using the Rect API, within the allocated position. - if (names != null && property.isExpanded) + if (hasDataSource && property.isExpanded) { - int selected = System.Array.IndexOf(names, themeDefinitionItemName.stringValue); - // Child fields are indented 15px from position.x. Unity's label/control // split is at position.x + labelWidth, so the label width is (labelWidth - 15f) // and the control starts at that same absolute split point. @@ -73,20 +72,30 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten Rect labelRect = new Rect(position.x + indentWidth, rowY, EditorGUIUtility.labelWidth - indentWidth, EditorGUIUtility.singleLineHeight); Rect controlRect = new Rect(splitX, rowY, rightEdge - splitX, EditorGUIUtility.singleLineHeight); - using (var check = new EditorGUI.ChangeCheckScope()) + if (names != null) + { + int selected = System.Array.IndexOf(names, themeDefinitionItemName.stringValue); + using (var check = new EditorGUI.ChangeCheckScope()) + { + EditorGUI.LabelField(labelRect, "Bound Theme Item"); + selected = EditorGUI.Popup(controlRect, selected, names); + if (check.changed) + { + themeDefinitionItemName.stringValue = names[selected]; + } + } + } + else { - EditorGUI.LabelField(labelRect, "Bound Theme Item"); - selected = EditorGUI.Popup(controlRect, selected, names); - if (check.changed) + using (new EditorGUI.DisabledScope(true)) { - themeDefinitionItemName.stringValue = names[selected]; + EditorGUI.LabelField(labelRect, "Bound Theme Item"); + EditorGUI.Popup(controlRect, 0, new string[] { "(No matching items)" }); } } } EditorGUI.EndProperty(); - - property.serializedObject.ApplyModifiedProperties(); } public override float GetPropertyHeight(SerializedProperty property, GUIContent label) diff --git a/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs b/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs index 9fa83f073..3f442a3e2 100644 --- a/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs +++ b/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs @@ -37,6 +37,8 @@ public void OnEnable() public override void OnInspectorGUI() { + serializedObject.Update(); + if (Event.current.type == EventType.Layout) { if (pendingIconSet != null && pendingIconToRenameOld != null && pendingIconToRenameNew != null) diff --git a/org.mixedrealitytoolkit.theming/Editor/ThemeDefinitionEditor.cs b/org.mixedrealitytoolkit.theming/Editor/ThemeDefinitionEditor.cs new file mode 100644 index 000000000..18d9c0d78 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Editor/ThemeDefinitionEditor.cs @@ -0,0 +1,39 @@ +// Copyright (c) Mixed Reality Toolkit Contributors +// Licensed under the BSD 3-Clause + +using UnityEditor; + +namespace MixedReality.Toolkit.Theming.Editor +{ + [CustomEditor(typeof(ThemeDefinition))] + public class ThemeDefinitionEditor : UnityEditor.Editor + { + public override void OnInspectorGUI() + { + serializedObject.Update(); + + DrawDefaultInspector(); + + ThemeDefinition def = target as ThemeDefinition; + if (def != null && def.ThemeDefinitionItems != null) + { + foreach (var item in def.ThemeDefinitionItems) + { + string displayLabel = string.IsNullOrWhiteSpace(item.Name) ? "(null)" : item.Name; + System.Type type = item.DataType?.Type; + + if (type == null) + { + EditorGUILayout.HelpBox($"Item '{displayLabel}' has no DataType selected, or the type could not be resolved.", MessageType.Warning); + } + else if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) + { + EditorGUILayout.HelpBox($"Item '{displayLabel}' uses an invalid DataType ({type.Name}). It must be a concrete, non-generic class to be instantiated.", MessageType.Warning); + } + } + } + + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/org.mixedrealitytoolkit.theming/Editor/ThemeDefinitionEditor.cs.meta b/org.mixedrealitytoolkit.theming/Editor/ThemeDefinitionEditor.cs.meta new file mode 100644 index 000000000..252cb02a7 --- /dev/null +++ b/org.mixedrealitytoolkit.theming/Editor/ThemeDefinitionEditor.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: bd66f2c84c6572b48a8ed4194a8bc818 \ No newline at end of file diff --git a/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs b/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs index a7dc1eab7..4c6cfcab4 100644 --- a/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs +++ b/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs @@ -16,6 +16,8 @@ public class ThemeEditor : UnityEditor.Editor private static bool itemsFoldout = false; + private static readonly System.Collections.Generic.HashSet failedTypes = new System.Collections.Generic.HashSet(); + private string nameField; private string dataField; private string valueField; @@ -35,6 +37,8 @@ protected void OnEnable() /// public override void OnInspectorGUI() { + serializedObject.Update(); + EditorGUILayout.PropertyField(themeDefinitionProp); ThemeDefinition themeDefinition = themeDefinitionProp.objectReferenceValue as ThemeDefinition; @@ -47,6 +51,12 @@ public override void OnInspectorGUI() if (Event.current.type == EventType.Layout) { ReconcileThemeItems(themeDefinition, themeItemsProp); + + // Force the SerializedObject to immediately sync any newly instantiated + // [SerializeReference] payloads so their child properties (like 'Value') + // are fully discoverable during this exact same Layout pass. + serializedObject.ApplyModifiedProperties(); + serializedObject.Update(); } using (new EditorGUI.IndentLevelScope()) @@ -57,18 +67,43 @@ public override void OnInspectorGUI() SerializedProperty dataProp = themeItemProp.FindPropertyRelative(dataField); SerializedProperty valueProp = dataProp?.FindPropertyRelative(valueField); + string themeItemName = themeItemProp.FindPropertyRelative(nameField).stringValue; + string displayLabel = string.IsNullOrWhiteSpace(themeItemName) ? "(null)" : themeItemName; + if (valueProp != null) { - // Draw just the Value field, labelled with the item name, + // Draw just the Value field, labeled with the item name, // skipping the intermediate "Data" foldout entirely. - string themeItemName = themeItemProp.FindPropertyRelative(nameField).stringValue; - EditorGUILayout.PropertyField(valueProp, new GUIContent(themeItemName), true); + EditorGUILayout.PropertyField(valueProp, new GUIContent(displayLabel), true); } else { - // Fallback for any item whose Data doesn't follow the - // BaseThemeItemData shape (e.g. a null reference). - EditorGUILayout.PropertyField(themeItemProp, true); + if (dataProp?.managedReferenceValue == null) + { + if (i < themeDefinition.ThemeDefinitionItems.Length) + { + var definitionItem = themeDefinition.ThemeDefinitionItems[i]; + if (definitionItem.DataType?.Type == null) + { + EditorGUILayout.HelpBox($"'{displayLabel}' has no valid DataType selected in the ThemeDefinition.", MessageType.Warning); + } + else + { + EditorGUILayout.HelpBox($"Failed to initialize data for '{displayLabel}'. Ensure its DataType ({definitionItem.DataType.Type.Name}) is a concrete class with a default constructor.", MessageType.Warning); + } + } + + using (new EditorGUI.DisabledScope(true)) + { + EditorGUILayout.LabelField(displayLabel, "null"); + } + } + else + { + // Fallback for any item whose Data doesn't follow the + // BaseThemeItemData shape. + EditorGUILayout.PropertyField(dataProp, new GUIContent(displayLabel), true); + } } } } @@ -109,34 +144,31 @@ private void ReconcileThemeItems(ThemeDefinition themeDefinition, SerializedProp { // Move the found item up to position i, preserving its saved values. themeItemsProp.MoveArrayElement(existingIndex, i); + themeItem = themeItemsProp.GetArrayElementAtIndex(i); } else { // No existing item found — insert a fresh one with default values. - themeItemsProp.InsertArrayElementAtIndex(i); themeItem = themeItemsProp.GetArrayElementAtIndex(i); + themeItem.managedReferenceValue = new Theme.ThemeItem(themeDefinitionItemName, null); + } + } - Type dataType = definitionItem.DataType?.Type; - object dataInstance = null; + // Unified instantiation and auto-healing for missing or mismatched data types + Type expectedType = definitionItem.DataType?.Type; + SerializedProperty dataProp = themeItem.FindPropertyRelative(dataField); + Type actualType = dataProp?.managedReferenceValue?.GetType(); - if (dataType != null) - { - try - { - dataInstance = Activator.CreateInstance(dataType); - } - catch (Exception e) - { - Debug.LogWarning($"Failed to instantiate data for ThemeItem '{themeDefinitionItemName}' (Type: {dataType.Name}). Falling back to null. Exception: {e.Message}"); - } - } - else - { - Debug.LogWarning($"Could not resolve DataType for ThemeItem '{themeDefinitionItemName}'. Falling back to null."); - } - - themeItem.managedReferenceValue = new Theme.ThemeItem(themeDefinitionItemName, dataInstance); + if (expectedType != null && expectedType != actualType && !failedTypes.Contains(expectedType)) + { + try + { + dataProp.managedReferenceValue = Activator.CreateInstance(expectedType); + } + catch + { + failedTypes.Add(expectedType); } } } diff --git a/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSelectorInspector.cs b/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSelectorInspector.cs index f1938bdfd..2dff1b06d 100644 --- a/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSelectorInspector.cs +++ b/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSelectorInspector.cs @@ -136,6 +136,9 @@ public void DrawIconGrid(FontIconSelector fontIconSelector, float tileSize) GUILayout.Height(tileSize), GUILayout.Width(tileSize))) { + // Flush any pending changes from other Inspector fields (e.g. lost focus) manually editing the icon name + serializedObject.ApplyModifiedProperties(); + if (fontIconSelector.TextMeshProComponent != null) { Undo.RecordObjects(new Object[] { fontIconSelector, fontIconSelector.TextMeshProComponent }, "Changed icon"); @@ -152,6 +155,9 @@ public void DrawIconGrid(FontIconSelector fontIconSelector, float tileSize) { PrefabUtility.RecordPrefabInstancePropertyModifications(fontIconSelector.TextMeshProComponent); } + + // Resync the serialized object after manually editing the icon name + serializedObject.Update(); } Rect textureRect = GUILayoutUtility.GetLastRect(); From 3400583e21ae7037fcff67be4e8af426e13647e8 Mon Sep 17 00:00:00 2001 From: Kurtis Date: Thu, 21 May 2026 16:40:38 -0700 Subject: [PATCH 15/18] Fixed editing multiple FontIconSets at once --- .../Editor/FontIconSetMapEditor.cs | 1 + .../FontIconSet/FontIconSetInspector.cs | 27 +++++++++++-------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs b/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs index 3f442a3e2..a9c9fcbf1 100644 --- a/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs +++ b/org.mixedrealitytoolkit.theming/Editor/FontIconSetMapEditor.cs @@ -43,6 +43,7 @@ public override void OnInspectorGUI() { if (pendingIconSet != null && pendingIconToRenameOld != null && pendingIconToRenameNew != null) { + Undo.RecordObject(pendingIconSet, "Rename Icon"); pendingIconSet.UpdateIconName(pendingIconToRenameOld, pendingIconToRenameNew); EditorUtility.SetDirty(pendingIconSet); pendingIconSet = null; diff --git a/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSetInspector.cs b/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSetInspector.cs index 63a10a0b4..3d3d46b5f 100644 --- a/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSetInspector.cs +++ b/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSetInspector.cs @@ -137,17 +137,26 @@ public override void OnInspectorGUI() { if (pendingIconToAdd.HasValue) { - AddIcon((FontIconSet)target, pendingIconToAdd.Value); + foreach (var t in targets) + { + requiresUpdate |= AddIcon((FontIconSet)t, pendingIconToAdd.Value); + } pendingIconToAdd = null; } if (pendingIconToRemove != null) { - RemoveIcon((FontIconSet)target, pendingIconToRemove); + foreach (var t in targets) + { + requiresUpdate |= RemoveIcon((FontIconSet)t, pendingIconToRemove); + } pendingIconToRemove = null; } if (pendingIconToRenameOld != null && pendingIconToRenameNew != null) { - UpdateIconName((FontIconSet)target, pendingIconToRenameOld, pendingIconToRenameNew); + foreach (var t in targets) + { + requiresUpdate |= UpdateIconName((FontIconSet)t, pendingIconToRenameOld, pendingIconToRenameNew); + } pendingIconToRenameOld = null; pendingIconToRenameNew = null; } @@ -363,7 +372,6 @@ private bool AddIcon(FontIconSet fontIconSet, uint unicodeValue) Undo.RecordObject(fontIconSet, "Add Icon"); if (fontIconSet.AddIcon(name, unicodeValue)) { - UpdateIconEntries(); EditorUtility.SetDirty(fontIconSet); return true; } @@ -377,7 +385,6 @@ private bool RemoveIcon(FontIconSet fontIconSet, string iconName) Undo.RecordObject(fontIconSet, "Remove Icon"); if (fontIconSet.RemoveIcon(iconName)) { - UpdateIconEntries(); EditorUtility.SetDirty(fontIconSet); return true; } @@ -385,14 +392,15 @@ private bool RemoveIcon(FontIconSet fontIconSet, string iconName) return false; } - private void UpdateIconName(FontIconSet fontIconSet, string oldName, string newName) + private bool UpdateIconName(FontIconSet fontIconSet, string oldName, string newName) { Undo.RecordObject(fontIconSet, "Rename Icon"); if (fontIconSet.UpdateIconName(oldName, newName)) { - UpdateIconEntries(); EditorUtility.SetDirty(fontIconSet); + return true; } + return false; } private bool CheckIfHoloLensIconFontExists() @@ -578,10 +586,7 @@ private static void EditorDrawTMPGlyph(Rect glyphRect, TMP_FontAsset fontAsset, } catch (Exception e) { - // Calling EditorGUILayout only during Repaint can cause - // "Getting control N's position in a group with only N controls", - // so we instead call GUI.Label to draw directly to the editor - GUI.Label(glyphRect, new GUIContent("!", $"Couldn't draw icon: {e.Message}")); + GUI.Label(glyphRect, new GUIContent($"Couldn't draw icon: {e.Message}")); } } } From 6815a9d0628784d926d4e11698e4f1f32a239833 Mon Sep 17 00:00:00 2001 From: Kurtis Date: Thu, 21 May 2026 16:43:01 -0700 Subject: [PATCH 16/18] Add cachedButtonOptions --- .../FontIconSet/FontIconSelectorInspector.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSelectorInspector.cs b/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSelectorInspector.cs index 2dff1b06d..48f9c8206 100644 --- a/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSelectorInspector.cs +++ b/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSelectorInspector.cs @@ -107,6 +107,8 @@ public override void OnInspectorGUI() private int numColumns = 4; private Vector2 scrollAmount; + private float cachedTileSize = 0f; + private GUILayoutOption[] cachedButtonOptions; public void DrawIconGrid(FontIconSelector fontIconSelector, float tileSize) { @@ -120,6 +122,12 @@ public void DrawIconGrid(FontIconSelector fontIconSelector, float tileSize) List> sortedIcons = new List>(fontIconSet.GlyphIconsByName); sortedIcons.Sort((a, b) => a.Key.CompareTo(b.Key)); + if (cachedTileSize != tileSize || cachedButtonOptions == null) + { + cachedTileSize = tileSize; + cachedButtonOptions = new GUILayoutOption[] { GUILayout.Height(tileSize), GUILayout.Width(tileSize) }; + } + foreach (KeyValuePair kvp in sortedIcons) { string iconName = kvp.Key; @@ -132,9 +140,7 @@ public void DrawIconGrid(FontIconSelector fontIconSelector, float tileSize) EditorGUILayout.BeginHorizontal(); } - if (GUILayout.Button(" ", - GUILayout.Height(tileSize), - GUILayout.Width(tileSize))) + if (GUILayout.Button(" ", cachedButtonOptions)) { // Flush any pending changes from other Inspector fields (e.g. lost focus) manually editing the icon name serializedObject.ApplyModifiedProperties(); From dece6a308b16718901d1aa5de8591569f2dc7ea5 Mon Sep 17 00:00:00 2001 From: Kurtis Date: Thu, 21 May 2026 20:07:43 -0700 Subject: [PATCH 17/18] All the null checks! --- .../Editor/BaseThemeBinderDrawer.cs | 3 ++- .../Editor/ThemeDefinitionEditor.cs | 2 ++ org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs | 3 ++- .../Editor/Inspectors/FontIconSet/FontIconSetInspector.cs | 2 ++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs b/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs index 9e51d9e7a..aad4bb5b5 100644 --- a/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs +++ b/org.mixedrealitytoolkit.theming/Editor/BaseThemeBinderDrawer.cs @@ -144,7 +144,8 @@ private string[] ParseThemeItems(ThemeDefinition themeDefinition, object binder) foreach (ThemeDefinition.ThemeDefinitionItem item in themeDefinition.ThemeDefinitionItems) { - if (!string.IsNullOrWhiteSpace(item.Name) + if (item != null + && !string.IsNullOrWhiteSpace(item.Name) && item.DataType?.Type != null && item.DataType.Type.BaseType != null && item.DataType.Type.BaseType.GenericTypeArguments.Length > 0 diff --git a/org.mixedrealitytoolkit.theming/Editor/ThemeDefinitionEditor.cs b/org.mixedrealitytoolkit.theming/Editor/ThemeDefinitionEditor.cs index 18d9c0d78..17a68df4b 100644 --- a/org.mixedrealitytoolkit.theming/Editor/ThemeDefinitionEditor.cs +++ b/org.mixedrealitytoolkit.theming/Editor/ThemeDefinitionEditor.cs @@ -19,6 +19,8 @@ public override void OnInspectorGUI() { foreach (var item in def.ThemeDefinitionItems) { + if (item == null) { continue; } + string displayLabel = string.IsNullOrWhiteSpace(item.Name) ? "(null)" : item.Name; System.Type type = item.DataType?.Type; diff --git a/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs b/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs index 4c6cfcab4..1e7365acb 100644 --- a/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs +++ b/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs @@ -119,6 +119,7 @@ private void ReconcileThemeItems(ThemeDefinition themeDefinition, SerializedProp for (int i = 0; i < definitionItems.Length; i++) { var definitionItem = definitionItems[i]; + if (definitionItem == null) { continue; } string themeDefinitionItemName = definitionItem.Name; SerializedProperty themeItem = themeItemsProp.arraySize > i ? themeItemsProp.GetArrayElementAtIndex(i) : null; @@ -160,7 +161,7 @@ private void ReconcileThemeItems(ThemeDefinition themeDefinition, SerializedProp SerializedProperty dataProp = themeItem.FindPropertyRelative(dataField); Type actualType = dataProp?.managedReferenceValue?.GetType(); - if (expectedType != null && expectedType != actualType && !failedTypes.Contains(expectedType)) + if (dataProp != null && expectedType != null && expectedType != actualType && !failedTypes.Contains(expectedType)) { try { diff --git a/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSetInspector.cs b/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSetInspector.cs index 3d3d46b5f..38aa1af8d 100644 --- a/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSetInspector.cs +++ b/org.mixedrealitytoolkit.uxcore/Editor/Inspectors/FontIconSet/FontIconSetInspector.cs @@ -203,6 +203,8 @@ public override void OnInspectorGUI() { FontIconSet fontIconSet = target as FontIconSet; TMP_FontAsset fontAsset = iconFontAssetProp.objectReferenceValue as TMP_FontAsset; + if (fontAsset == null) { return; } + FontIconSetDefinition setDefinition = fontIconSetDefinitionProp.objectReferenceValue as FontIconSetDefinition; showAvailableIcons = EditorGUILayout.Foldout(showAvailableIcons, "Available Icons", true); From 258e5a2ccc0bd46785565a36c8c29f4fc38b3559 Mon Sep 17 00:00:00 2001 From: Kurtis Date: Thu, 21 May 2026 20:18:58 -0700 Subject: [PATCH 18/18] Invalidate failedTypes during AssemblyReloadEvents.afterAssemblyReload --- org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs b/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs index 1e7365acb..451512b7a 100644 --- a/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs +++ b/org.mixedrealitytoolkit.theming/Editor/ThemeEditor.cs @@ -22,6 +22,11 @@ public class ThemeEditor : UnityEditor.Editor private string dataField; private string valueField; + static ThemeEditor() + { + AssemblyReloadEvents.afterAssemblyReload += failedTypes.Clear; + } + protected void OnEnable() { themeDefinitionProp = serializedObject.FindProperty("definition"); @@ -30,6 +35,9 @@ protected void OnEnable() nameField = InspectorUIUtility.GetBackingField(nameof(ThemeDefinition.ThemeDefinitionItem.Name)); dataField = InspectorUIUtility.GetBackingField(nameof(Theme.ThemeItem.Data)); valueField = InspectorUIUtility.GetBackingField(nameof(BaseThemeItemData.Value)); + + // Clear the cache when the asset is (re)selected + failedTypes.Clear(); } ///