In my project, I use:
- Unity-2022-3-LTS.20f1
- Apple visionOS XR Plugin
- PolySpatial 1.0.3
- PolySpatial visionOS 1.0.3
- PolySpatial, PolySpatial XR
I want to control transform in GameObject
for movement and scaling with collider and EnhancedSpatialPointerSupport
, EnhandedTouch.Touch.activeTouches
when i check my spatial ui button, there is Debug Poly Spatial Object Link component, and if i check Loinked To parameter, i can find PolySpatial iid ----- in DontDestroyOnLoad
There is Box Collider
component, but when i check 3D Model GameObject Debug Poly Spatial GameObject Link loaded with trilib do not create collider
i think is why i cannot get touch data with EnhancedTouch.Touch.aciveTouches
.
How can is fix it?
it is my test code for detect touch
i got no data in var activeTouches = Touch.activeTouches;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.EnhancedTouch;
using UnityEngine.InputSystem.LowLevel;
using TouchPhase = UnityEngine.InputSystem.TouchPhase;
using Touch = UnityEngine.InputSystem.EnhancedTouch.Touch;
using Unity.PolySpatial.InputDevices;
using System.Linq;
public class SpatialUIInputManager : MonoBehaviour
{
GameObject m_SelectedObject;
void OnEnable()
{
EnhancedTouchSupport.Enable();
}
void Update()
{
var activeTouches = Touch.activeTouches;
Touch.activeTouches.ToList().ForEach((t) => Debug.Log(t));
if (activeTouches.Count > 0)
{
var primaryTouchData = EnhancedSpatialPointerSupport.GetPointerState(activeTouches[0]);
var touchPhase = activeTouches[0].phase;
Debug.Log(primaryTouchData);
Debug.Log(touchPhase);
if (touchPhase == TouchPhase.Began && primaryTouchData.Kind == SpatialPointerKind.IndirectPinch || primaryTouchData.Kind == SpatialPointerKind.DirectPinch)
{
var buttonObject = primaryTouchData.targetObject;
if (buttonObject != null)
{
if (buttonObject.TryGetComponent(out SpatialUI uiElement))
{
uiElement.PressStart();
}
}
// if the targetObject is not null, set it to the selected object
m_SelectedObject = primaryTouchData.targetObject != null ? primaryTouchData.targetObject : null;
}
if (activeTouches[0].phase == TouchPhase.Moved)
{
if (m_SelectedObject != null)
{
m_SelectedObject.transform.SetPositionAndRotation(primaryTouchData.interactionPosition, primaryTouchData.inputDeviceRotation);
m_SelectedObject.transform.rotation = new Quaternion(0, 0, 0, 0);
}
}
if (touchPhase == TouchPhase.Ended || touchPhase == TouchPhase.Canceled)
{
var buttonObject = primaryTouchData.targetObject;
if (buttonObject != null)
{
if (buttonObject.TryGetComponent(out SpatialUI uiElement))
{
uiElement.PressEnd();
}
}
m_SelectedObject = null;
}
}
}
}