using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;
using UnityEngine.XR.OpenXR.Input;
using UnityEngine.InputSystem;
///
/// Example code for Vulkan Late latching support. For use cases example, please check out Controller Sample - Head object, LeftHand/Aim object and RightHand/Grip object.
/// See: https://docs.unity3d.com/ScriptReference/XR.XRDisplaySubsystem.MarkTransformLateLatched.html
///
namespace UnityEngine.XR.OpenXR.Samples.ControllerSample
{
public class MarkLateLatchNode : MonoBehaviour
{
private XRDisplaySubsystem m_DisplaySubsystem = null;
public UnityEngine.XR.XRDisplaySubsystem.LateLatchNode lateLatchNode;
//Set one pose type InputAction for each hand to be late latched - e.g.: Aim or Grip. For head node, leave it unset.
[SerializeField] private InputActionReference _ActionReference = null;
// Start is called before the first frame update
void Start()
{
List subsys = new List();
SubsystemManager.GetSubsystems(subsys);
if (subsys.Count >= 1)
m_DisplaySubsystem = subsys[0];
if (_ActionReference != null)
{
bool result = OpenXRInput.TrySetControllerLateLatchAction(_ActionReference.action);
Debug.LogFormat("TrySetControllerLateLatchAction returns {0} for action {1}.", result, _ActionReference);
}
}
// Update is called once per frame
void Update()
{
if (m_DisplaySubsystem != null)
{
transform.position += new Vector3(0.00001f, 0, 0);
Quaternion rot = transform.rotation;
rot.x += 0.00001f;
transform.rotation = rot;
m_DisplaySubsystem.MarkTransformLateLatched(transform, lateLatchNode);
}
}
}
}