Skip to content

Commit e0f5a80

Browse files
committed
Add hand mesh manager
1 parent bffa240 commit e0f5a80

File tree

7 files changed

+297
-62
lines changed

7 files changed

+297
-62
lines changed

org.mixedrealitytoolkit.input/Visualizers/HandMeshVisualizer.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ public bool ShowHandsOnTransparentDisplays
3434
set => showHandsOnTransparentDisplays = value;
3535
}
3636

37+
/// <summary>
38+
/// Whether this visualizer currently has a loaded and visible hand mesh or not.
39+
/// </summary>
40+
public abstract bool IsRendering { get; }
41+
3742
// Scratch list for checking for the presence of display subsystems.
3843
private readonly List<XRDisplaySubsystem> displaySubsystems = new List<XRDisplaySubsystem>();
3944

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// Copyright (c) Mixed Reality Toolkit Contributors
2+
// Licensed under the BSD 3-Clause
3+
4+
using UnityEngine;
5+
6+
namespace MixedReality.Toolkit.Input
7+
{
8+
/// <summary>
9+
/// Manages the visibility of a set of hand mesh visualizers, all representing possible
10+
/// visualization modes for a single hand (like platform-provided vs the built-in rigged hand mesh).
11+
/// </summary>
12+
public class HandMeshVisualizerManager : MonoBehaviour
13+
{
14+
[SerializeField, Tooltip("A priority-ordered visualizer list.")]
15+
private HandMeshVisualizer[] visualizers;
16+
17+
protected void Update()
18+
{
19+
int renderingVisualizer = -1;
20+
21+
for (int i = 0; i < visualizers.Length; i++)
22+
{
23+
// If we've already found a rendering visualizer, we want to turn off the rest
24+
if (renderingVisualizer > -1)
25+
{
26+
visualizers[i].enabled = false;
27+
}
28+
else if (visualizers[i].IsRendering)
29+
{
30+
renderingVisualizer = i;
31+
}
32+
}
33+
34+
// Ensure any visualizers that preceded the rendering one are turned off
35+
for (int i = 0; i < renderingVisualizer; i++)
36+
{
37+
visualizers[i].enabled = false;
38+
}
39+
40+
if (renderingVisualizer == -1)
41+
{
42+
for (int i = 0; i < visualizers.Length; i++)
43+
{
44+
visualizers[i].enabled = true;
45+
}
46+
}
47+
}
48+
}
49+
}

org.mixedrealitytoolkit.input/Visualizers/HandMeshVisualizerManager.cs.meta

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

org.mixedrealitytoolkit.input/Visualizers/PlatformHandVisualizer/PlatformHandMeshVisualizer.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ public class PlatformHandMeshVisualizer : HandMeshVisualizer
3737
// The XRController that is used to determine the pinch strength (i.e., select value!)
3838
private XRBaseController controller;
3939

40+
/// <inheritdoc/>
41+
public override bool IsRendering => handRenderer != null && handRenderer.enabled && ShouldRenderHand();
42+
4043
/// <inheritdoc/>
4144
protected override void OnEnable()
4245
{

org.mixedrealitytoolkit.input/Visualizers/Prefabs/openxr_left_hand.prefab

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ PrefabInstance:
55
m_ObjectHideFlags: 0
66
serializedVersion: 2
77
m_Modification:
8+
serializedVersion: 3
89
m_TransformParent: {fileID: 0}
910
m_Modifications:
1011
- target: {fileID: -7366846053233975685, guid: da93d751ddc0f64468dfc02f18d02d00, type: 3}
@@ -99,6 +100,18 @@ PrefabInstance:
99100
propertyPath: controllerDetectedAction.m_Action.m_SingletonActionBindings.Array.data[0].m_Action
100101
value: Controller Detected
101102
objectReference: {fileID: 0}
103+
- target: {fileID: 1493009138236857671, guid: da93d751ddc0f64468dfc02f18d02d00, type: 3}
104+
propertyPath: m_LocalScale.x
105+
value: -1
106+
objectReference: {fileID: 0}
107+
- target: {fileID: 1800205545854781715, guid: da93d751ddc0f64468dfc02f18d02d00, type: 3}
108+
propertyPath: handNode
109+
value: 4
110+
objectReference: {fileID: 0}
111+
- target: {fileID: 2263138549649042646, guid: da93d751ddc0f64468dfc02f18d02d00, type: 3}
112+
propertyPath: handNode
113+
value: 4
114+
objectReference: {fileID: 0}
102115
- target: {fileID: 3507431783398283103, guid: da93d751ddc0f64468dfc02f18d02d00, type: 3}
103116
propertyPath: handNode
104117
value: 4
@@ -111,10 +124,6 @@ PrefabInstance:
111124
propertyPath: m_RootOrder
112125
value: 0
113126
objectReference: {fileID: 0}
114-
- target: {fileID: 3973969148631863464, guid: da93d751ddc0f64468dfc02f18d02d00, type: 3}
115-
propertyPath: m_LocalScale.x
116-
value: -1
117-
objectReference: {fileID: 0}
118127
- target: {fileID: 3973969148631863464, guid: da93d751ddc0f64468dfc02f18d02d00, type: 3}
119128
propertyPath: m_LocalPosition.x
120129
value: 0
@@ -160,4 +169,7 @@ PrefabInstance:
160169
value: openxr_left_hand
161170
objectReference: {fileID: 0}
162171
m_RemovedComponents: []
172+
m_RemovedGameObjects: []
173+
m_AddedGameObjects: []
174+
m_AddedComponents: []
163175
m_SourcePrefab: {fileID: 100100000, guid: da93d751ddc0f64468dfc02f18d02d00, type: 3}

0 commit comments

Comments
 (0)