Files
adriadri6972 d3d9c5f833 upload project
2025-07-31 15:21:08 +02:00

131 lines
4.2 KiB
C#

using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace Unity.XR.XREAL.Samples
{
/// <summary>
/// This sample demonstrates how to switch between different tracking modes and input sources.
/// </summary>
public class HelloMR : MonoBehaviour
{
[SerializeField]
TMP_Text m_TextCurrentMode;
[SerializeField]
Toggle m_Toggle0Dof;
[SerializeField]
Toggle m_Toggle0DofStable;
[SerializeField]
Toggle m_Toggle3Dof;
[SerializeField]
Toggle m_Toggle6Dof;
[SerializeField]
Button m_ButtonHandInput;
private void Start()
{
m_TextCurrentMode.text = $"Current Mode: {XREALPlugin.GetTrackingType()}";
XREALPlugin.OnTrackingTypeChanged += OnTrackingTypeChanged;
m_Toggle0Dof.onValueChanged.AddListener(On0DofToggleChanged);
m_Toggle0DofStable.onValueChanged.AddListener(On0DofStableToggleChanged);
m_Toggle3Dof.onValueChanged.AddListener(On3DofToggleChanged);
m_Toggle6Dof.onValueChanged.AddListener(On6DofToggleChanged);
InitDofUI();
m_ButtonHandInput.interactable = XREALPlugin.IsHMDFeatureSupported(XREALSupportedFeature.XREAL_FEATURE_PERCEPTION_HEAD_TRACKING_POSITION);
}
private void OnDestroy()
{
XREALPlugin.OnTrackingTypeChanged -= OnTrackingTypeChanged;
m_Toggle0Dof.onValueChanged.RemoveListener(On0DofToggleChanged);
m_Toggle0DofStable.onValueChanged.RemoveListener(On0DofStableToggleChanged);
m_Toggle3Dof.onValueChanged.RemoveListener(On3DofToggleChanged);
m_Toggle6Dof.onValueChanged.RemoveListener(On6DofToggleChanged);
}
private void InitDofUI()
{
switch (XREALPlugin.GetTrackingType())
{
case TrackingType.MODE_0DOF:
m_Toggle0Dof.SetIsOnWithoutNotify(true);
break;
case TrackingType.MODE_0DOF_STAB:
m_Toggle0DofStable.SetIsOnWithoutNotify(true);
break;
case TrackingType.MODE_3DOF:
m_Toggle3Dof.SetIsOnWithoutNotify(true);
break;
case TrackingType.MODE_6DOF:
m_Toggle6Dof.SetIsOnWithoutNotify(true);
break;
}
}
private void On6DofToggleChanged(bool on)
{
if (on)
{
_ = XREALPlugin.SwitchTrackingTypeAsync(TrackingType.MODE_6DOF, OnTrackingTypeChanged);
}
}
private void On3DofToggleChanged(bool on)
{
if (on)
{
_ = XREALPlugin.SwitchTrackingTypeAsync(TrackingType.MODE_3DOF, OnTrackingTypeChanged);
}
}
private void On0DofStableToggleChanged(bool on)
{
if (on)
{
_ = XREALPlugin.SwitchTrackingTypeAsync(TrackingType.MODE_0DOF_STAB, OnTrackingTypeChanged);
}
}
private void On0DofToggleChanged(bool on)
{
if (on)
{
_ = XREALPlugin.SwitchTrackingTypeAsync(TrackingType.MODE_0DOF, OnTrackingTypeChanged);
}
}
/// <summary>
/// Changes the input source to controller.
/// </summary>
public void ChangeToControllerInput()
{
XREALPlugin.SetInputSource(InputSource.Controller);
}
/// <summary>
/// Changes the input source to hand.
/// </summary>
public void ChangeToHandInput()
{
XREALPlugin.SetInputSource(InputSource.Hands);
}
/// <summary>
/// Vibrates the controller.
/// </summary>
public void Vibrate()
{
if (XREALVirtualController.Singleton != null)
XREALVirtualController.Singleton.Controller.SendHapticImpulse(0, 0.25f, 0.1f);
}
private void OnTrackingTypeChanged(bool result, TrackingType targetTrackingType)
{
var currentTrackingType = XREALPlugin.GetTrackingType();
m_TextCurrentMode.text = $"Current Mode: {currentTrackingType}";
}
}
}