Skip to content

Commit 55defde

Browse files
authored
Add more theming binders (#1130)
* Add skybox theming = * Add BehaviourEnabledBinder * Add docs * Update README.md * Update CHANGELOGs and package files * Update ThemeDefinitionEditor.cs.meta * Add button select pulse * Update CHANGELOG.md * Update package.json
1 parent 46b3a50 commit 55defde

32 files changed

Lines changed: 275 additions & 35 deletions

org.mixedrealitytoolkit.core/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
44

5+
## Unreleased
6+
7+
### Added
8+
9+
* Added new `editorDefault` field for debugging the various `DisplayType`s in-editor. [PR #1130](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1130)
10+
511
## [4.0.0-pre.3] - 2026-05-20
612

713
### Added

org.mixedrealitytoolkit.core/Camera/CameraSettingsManager.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ namespace MixedReality.Toolkit
1212
[AddComponentMenu("MRTK/Core/Camera Settings Manager")]
1313
public class CameraSettingsManager : MonoBehaviour
1414
{
15-
[SerializeField]
15+
[SerializeField, Tooltip("The default display type in the editor.")]
16+
private DisplayType editorDefault = DisplayType.Transparent;
17+
18+
[SerializeField, Tooltip("The settings to apply when the display is opaque (VR).")]
1619
private CameraSettings opaqueDisplay = new CameraSettings(DisplayType.Opaque);
1720

1821
/// <summary>
@@ -24,7 +27,7 @@ public CameraSettings OpaqueDisplay
2427
set => opaqueDisplay = value;
2528
}
2629

27-
[SerializeField]
30+
[SerializeField, Tooltip("The settings to apply when the display is transparent (AR).")]
2831
private CameraSettings transparentDisplay = new CameraSettings(DisplayType.Transparent);
2932

3033
/// <summary>
@@ -81,7 +84,7 @@ private void UpdateCameraSettings(DisplayType type)
8184
{
8285
using (UpdateCameraSettingsPerfMarker.Auto())
8386
{
84-
UnityEngine.Camera mainCamera = Camera.main;
87+
Camera mainCamera = Camera.main;
8588

8689
switch (type)
8790
{
@@ -133,7 +136,7 @@ private DisplayType GetDisplayType()
133136
{
134137
using (GetDisplayTypePerfMarker.Auto())
135138
{
136-
if (XRSubsystemHelpers.DisplaySubsystem == null) { return DisplayType.Unknown; }
139+
if (XRSubsystemHelpers.DisplaySubsystem == null) { return Application.isEditor ? editorDefault : DisplayType.Unknown; }
137140
return XRSubsystemHelpers.DisplaySubsystem.displayOpaque ? DisplayType.Opaque : DisplayType.Transparent;
138141
}
139142
}

org.mixedrealitytoolkit.core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "org.mixedrealitytoolkit.core",
3-
"version": "4.0.0-development.pre.3",
3+
"version": "4.0.0-development.pre.4",
44
"description": "A limited collection of common interfaces and utilities that most MRTK packages share. Most implementations of these interfaces are contained in other packages in the MRTK ecosystem.",
55
"displayName": "MRTK Core Definitions",
66
"msftFeatureCategory": "MRTK3",

org.mixedrealitytoolkit.input/Assets/Prefabs/MRTK XR Rig.prefab

Lines changed: 65 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ GameObject:
1414
- component: {fileID: 2351505566771328560}
1515
- component: {fileID: 2351505566771328561}
1616
- component: {fileID: 404949538145338360}
17+
- component: {fileID: 2036977346182542242}
18+
- component: {fileID: 9155035745778857788}
1719
m_Layer: 0
1820
m_Name: Main Camera
1921
m_TagString: MainCamera
@@ -28,13 +30,13 @@ Transform:
2830
m_PrefabInstance: {fileID: 0}
2931
m_PrefabAsset: {fileID: 0}
3032
m_GameObject: {fileID: 2351505566771328562}
33+
serializedVersion: 2
3134
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
3235
m_LocalPosition: {x: 0, y: 0, z: 0}
3336
m_LocalScale: {x: 1, y: 1, z: 1}
3437
m_ConstrainProportionsScale: 0
3538
m_Children: []
3639
m_Father: {fileID: 2351505566903569412}
37-
m_RootOrder: 0
3840
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
3941
--- !u!20 &2351505566771328527
4042
Camera:
@@ -50,9 +52,17 @@ Camera:
5052
m_projectionMatrixMode: 1
5153
m_GateFitMode: 2
5254
m_FOVAxisMode: 0
55+
m_Iso: 200
56+
m_ShutterSpeed: 0.005
57+
m_Aperture: 16
58+
m_FocusDistance: 10
59+
m_FocalLength: 50
60+
m_BladeCount: 5
61+
m_Curvature: {x: 2, y: 11}
62+
m_BarrelClipping: 0.25
63+
m_Anamorphism: 0
5364
m_SensorSize: {x: 36, y: 24}
5465
m_LensShift: {x: 0, y: 0}
55-
m_FocalLength: 50
5666
m_NormalizedViewPortRect:
5767
serializedVersion: 2
5868
x: 0
@@ -232,6 +242,7 @@ MonoBehaviour:
232242
m_Script: {fileID: 11500000, guid: 80bee04b0b615324e81420c8aac0dc47, type: 3}
233243
m_Name:
234244
m_EditorClassIdentifier:
245+
editorDefault: 1
235246
opaqueDisplay:
236247
clearMode: 1
237248
clearColor: {r: 0, g: 0, b: 0, a: 0}
@@ -246,6 +257,38 @@ MonoBehaviour:
246257
farPlaneDistance: 50
247258
adjustQualityLevel: 1
248259
qualityLevel: 0
260+
--- !u!45 &2036977346182542242
261+
Skybox:
262+
m_ObjectHideFlags: 0
263+
m_CorrespondingSourceObject: {fileID: 0}
264+
m_PrefabInstance: {fileID: 0}
265+
m_PrefabAsset: {fileID: 0}
266+
m_GameObject: {fileID: 2351505566771328562}
267+
m_Enabled: 1
268+
m_CustomSkybox: {fileID: 0}
269+
--- !u!114 &9155035745778857788
270+
MonoBehaviour:
271+
m_ObjectHideFlags: 0
272+
m_CorrespondingSourceObject: {fileID: 0}
273+
m_PrefabInstance: {fileID: 0}
274+
m_PrefabAsset: {fileID: 0}
275+
m_GameObject: {fileID: 2351505566771328562}
276+
m_Enabled: 1
277+
m_EditorHideFlags: 0
278+
m_Script: {fileID: 11500000, guid: 699100ca886480c4a94ced56b1ae0e94, type: 3}
279+
m_Name:
280+
m_EditorClassIdentifier:
281+
themeDataSource: {fileID: 11400000, guid: 57993c46ea42acf4ca3067542443bc45, type: 2}
282+
binders:
283+
- rid: 8397413447246282960
284+
references:
285+
version: 2
286+
RefIds:
287+
- rid: 8397413447246282960
288+
type: {class: SkyboxMaterialBinder, ns: MixedReality.Toolkit.Theming, asm: MixedReality.Toolkit.Theming}
289+
data:
290+
<Target>k__BackingField: {fileID: 2036977346182542242}
291+
<ThemeDefinitionItemName>k__BackingField: Skybox
249292
--- !u!1 &2351505566903569413
250293
GameObject:
251294
m_ObjectHideFlags: 0
@@ -271,6 +314,7 @@ Transform:
271314
m_PrefabInstance: {fileID: 0}
272315
m_PrefabAsset: {fileID: 0}
273316
m_GameObject: {fileID: 2351505566903569413}
317+
serializedVersion: 2
274318
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
275319
m_LocalPosition: {x: 0, y: 1.6, z: 0}
276320
m_LocalScale: {x: 1, y: 1, z: 1}
@@ -281,7 +325,6 @@ Transform:
281325
- {fileID: 5769779419222680683}
282326
- {fileID: 7294214612838230064}
283327
m_Father: {fileID: 2351505567455720332}
284-
m_RootOrder: 0
285328
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
286329
--- !u!114 &3712792914886690938
287330
MonoBehaviour:
@@ -338,6 +381,7 @@ Transform:
338381
m_PrefabInstance: {fileID: 0}
339382
m_PrefabAsset: {fileID: 0}
340383
m_GameObject: {fileID: 2351505567455720334}
384+
serializedVersion: 2
341385
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
342386
m_LocalPosition: {x: 0, y: 0, z: 0}
343387
m_LocalScale: {x: 1, y: 1, z: 1}
@@ -348,7 +392,6 @@ Transform:
348392
- {fileID: 1074856417076994631}
349393
- {fileID: 6448619845270702420}
350394
m_Father: {fileID: 0}
351-
m_RootOrder: 0
352395
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
353396
--- !u!114 &4160709927669568829
354397
MonoBehaviour:
@@ -416,13 +459,13 @@ Transform:
416459
m_PrefabInstance: {fileID: 0}
417460
m_PrefabAsset: {fileID: 0}
418461
m_GameObject: {fileID: 7735890427496681069}
462+
serializedVersion: 2
419463
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
420464
m_LocalPosition: {x: 0, y: 0, z: 0}
421465
m_LocalScale: {x: 1, y: 1, z: 1}
422466
m_ConstrainProportionsScale: 0
423467
m_Children: []
424468
m_Father: {fileID: 2351505567455720332}
425-
m_RootOrder: 3
426469
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
427470
--- !u!114 &8085333164323593313
428471
MonoBehaviour:
@@ -500,13 +543,13 @@ Transform:
500543
m_PrefabInstance: {fileID: 0}
501544
m_PrefabAsset: {fileID: 0}
502545
m_GameObject: {fileID: 8479077998186684813}
546+
serializedVersion: 2
503547
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
504548
m_LocalPosition: {x: 0, y: 0, z: 0}
505549
m_LocalScale: {x: 1, y: 1, z: 1}
506550
m_ConstrainProportionsScale: 0
507551
m_Children: []
508552
m_Father: {fileID: 2351505567455720332}
509-
m_RootOrder: 1
510553
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
511554
--- !u!114 &7720573869748407015
512555
MonoBehaviour:
@@ -549,6 +592,7 @@ PrefabInstance:
549592
m_ObjectHideFlags: 0
550593
serializedVersion: 2
551594
m_Modification:
595+
serializedVersion: 3
552596
m_TransformParent: {fileID: 2351505566903569412}
553597
m_Modifications:
554598
- target: {fileID: 3021976565802998075, guid: d8a2a1f4b4f78754c86045f7a36fe424, type: 3}
@@ -567,14 +611,6 @@ PrefabInstance:
567611
propertyPath: m_ActivateInput.m_InputActionReferencePerformed
568612
value:
569613
objectReference: {fileID: 0}
570-
- target: {fileID: 6058071957502615222, guid: d8a2a1f4b4f78754c86045f7a36fe424, type: 3}
571-
propertyPath: m_UpdateType
572-
value: 0
573-
objectReference: {fileID: 0}
574-
- target: {fileID: 6853218870844938225, guid: d8a2a1f4b4f78754c86045f7a36fe424, type: 3}
575-
propertyPath: m_RootOrder
576-
value: 1
577-
objectReference: {fileID: 0}
578614
- target: {fileID: 6853218870844938225, guid: d8a2a1f4b4f78754c86045f7a36fe424, type: 3}
579615
propertyPath: m_LocalPosition.x
580616
value: 0
@@ -620,6 +656,9 @@ PrefabInstance:
620656
value: MRTK Gaze Controller
621657
objectReference: {fileID: 0}
622658
m_RemovedComponents: []
659+
m_RemovedGameObjects: []
660+
m_AddedGameObjects: []
661+
m_AddedComponents: []
623662
m_SourcePrefab: {fileID: 100100000, guid: d8a2a1f4b4f78754c86045f7a36fe424, type: 3}
624663
--- !u!114 &529201713281613631 stripped
625664
MonoBehaviour:
@@ -653,12 +692,9 @@ PrefabInstance:
653692
m_ObjectHideFlags: 0
654693
serializedVersion: 2
655694
m_Modification:
695+
serializedVersion: 3
656696
m_TransformParent: {fileID: 2351505566903569412}
657697
m_Modifications:
658-
- target: {fileID: 445577537456690332, guid: 2e5b90c191b94004182e55a48f0ca427, type: 3}
659-
propertyPath: m_RootOrder
660-
value: 2
661-
objectReference: {fileID: 0}
662698
- target: {fileID: 445577537456690332, guid: 2e5b90c191b94004182e55a48f0ca427, type: 3}
663699
propertyPath: m_LocalPosition.x
664700
value: 0
@@ -708,6 +744,9 @@ PrefabInstance:
708744
value:
709745
objectReference: {fileID: 529201713281613631}
710746
m_RemovedComponents: []
747+
m_RemovedGameObjects: []
748+
m_AddedGameObjects: []
749+
m_AddedComponents: []
711750
m_SourcePrefab: {fileID: 100100000, guid: 2e5b90c191b94004182e55a48f0ca427, type: 3}
712751
--- !u!4 &5769779419222680683 stripped
713752
Transform:
@@ -730,6 +769,7 @@ PrefabInstance:
730769
m_ObjectHideFlags: 0
731770
serializedVersion: 2
732771
m_Modification:
772+
serializedVersion: 3
733773
m_TransformParent: {fileID: 2351505567455720332}
734774
m_Modifications:
735775
- target: {fileID: 919676360596656614, guid: 02502921f64c38d48b14f1d6c2438b16, type: 3}
@@ -748,10 +788,6 @@ PrefabInstance:
748788
propertyPath: m_Name
749789
value: MRTK Interaction Manager
750790
objectReference: {fileID: 0}
751-
- target: {fileID: 7821592117992173402, guid: 02502921f64c38d48b14f1d6c2438b16, type: 3}
752-
propertyPath: m_RootOrder
753-
value: 2
754-
objectReference: {fileID: 0}
755791
- target: {fileID: 7821592117992173402, guid: 02502921f64c38d48b14f1d6c2438b16, type: 3}
756792
propertyPath: m_LocalPosition.x
757793
value: 0
@@ -793,6 +829,9 @@ PrefabInstance:
793829
value: 0
794830
objectReference: {fileID: 0}
795831
m_RemovedComponents: []
832+
m_RemovedGameObjects: []
833+
m_AddedGameObjects: []
834+
m_AddedComponents: []
796835
m_SourcePrefab: {fileID: 100100000, guid: 02502921f64c38d48b14f1d6c2438b16, type: 3}
797836
--- !u!114 &800708247703322884 stripped
798837
MonoBehaviour:
@@ -815,16 +854,13 @@ PrefabInstance:
815854
m_ObjectHideFlags: 0
816855
serializedVersion: 2
817856
m_Modification:
857+
serializedVersion: 3
818858
m_TransformParent: {fileID: 2351505566903569412}
819859
m_Modifications:
820860
- target: {fileID: 1948193615953854874, guid: 90f955d6c9d709448a0b1e29e1f9c046, type: 3}
821861
propertyPath: m_Name
822862
value: MRTK LeftHand Controller
823863
objectReference: {fileID: 0}
824-
- target: {fileID: 1948193615953854875, guid: 90f955d6c9d709448a0b1e29e1f9c046, type: 3}
825-
propertyPath: m_RootOrder
826-
value: 3
827-
objectReference: {fileID: 0}
828864
- target: {fileID: 1948193615953854875, guid: 90f955d6c9d709448a0b1e29e1f9c046, type: 3}
829865
propertyPath: m_LocalPosition.x
830866
value: 0
@@ -874,6 +910,9 @@ PrefabInstance:
874910
value:
875911
objectReference: {fileID: 529201713281613631}
876912
m_RemovedComponents: []
913+
m_RemovedGameObjects: []
914+
m_AddedGameObjects: []
915+
m_AddedComponents: []
877916
m_SourcePrefab: {fileID: 100100000, guid: 90f955d6c9d709448a0b1e29e1f9c046, type: 3}
878917
--- !u!114 &6032659918864907508 stripped
879918
MonoBehaviour:

org.mixedrealitytoolkit.input/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
1515
* Added `MRTKFocusFeature` to provide XrSession focus info to MRTK components. [PR #1057](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1057)
1616
* Added input action focus handling to disable controller/hand tracked state when the XrSession goes out of focus. [PR #1057](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1057)
1717
* Added support for XR_MSFT_hand_tracking_mesh and XR_ANDROID_hand_mesh on compatible runtimes. [PR #993](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/993)
18+
* Added `Skybox` component to "MRTK XR Rig.prefab" for theming the skybox material. [PR #1130](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/1130)
1819

1920
### Changed
2021

org.mixedrealitytoolkit.theming/Binders/BaseThemeBinder.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,31 @@
66

77
namespace MixedReality.Toolkit.Theming
88
{
9+
/// <summary>
10+
/// Base class for a theme binder that binds a theme data value of type <typeparamref name="T"/> to a target component of type <typeparamref name="K"/>.
11+
/// </summary>
912
public abstract class BaseThemeBinder<T, K> : IBinder
1013
{
14+
/// <summary>
15+
/// The target component to apply the theme data to.
16+
/// </summary>
1117
[field: SerializeField]
1218
protected K Target { get; private set; }
1319

20+
/// <inheritdoc />
1421
[field: SerializeField, HideInInspector]
1522
public string ThemeDefinitionItemName { get; private set; }
1623

24+
/// <summary>
25+
/// Applies the theme data value to the target component.
26+
/// </summary>
27+
/// <param name="themeItemData">The theme data to apply.</param>
1728
protected abstract void Apply(BaseThemeItemData<T> themeItemData);
1829

30+
/// <summary>
31+
/// Invoked when the active theme is changed on the data source.
32+
/// </summary>
33+
/// <param name="changeEvent">The change event containing the new theme.</param>
1934
protected void OnThemeChanged(ChangeEvent<Theme> changeEvent)
2035
{
2136
if (changeEvent.newValue == null)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright (c) Mixed Reality Toolkit Contributors
2+
// Licensed under the BSD 3-Clause
3+
4+
using UnityEngine;
5+
6+
namespace MixedReality.Toolkit.Theming
7+
{
8+
/// <summary>
9+
/// Binds a boolean theme data value to the enabled state of a <see cref="UnityEngine.Behaviour"/>.
10+
/// </summary>
11+
[System.Serializable]
12+
public class BehaviourEnabledBinder : BaseThemeBinder<bool, Behaviour>
13+
{
14+
/// <inheritdoc />
15+
protected override void Apply(BaseThemeItemData<bool> themeItemData)
16+
{
17+
if (Target != null)
18+
{
19+
Target.enabled = themeItemData.Value;
20+
}
21+
}
22+
}
23+
}

org.mixedrealitytoolkit.theming/Binders/BehaviourEnabledBinder.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)