using UnityEngine;
using UnityEngine.Assertions;
using System;
namespace Rokid.UXR.Interaction
{
public class PokeInteractable : PointerInteractable<PokeInteractor, PokeInteractable>
{
[SerializeField, Interface(typeof(ISurface))]
public MonoBehaviour _surface;
public ISurface Surface;
[SerializeField, Interface(typeof(ISurface))]
private MonoBehaviour _colliderSurface;
public ISurface ColliderSurface;
[SerializeField, Interface(typeof(IProximityField))]
private MonoBehaviour _proximityField;
public IProximityField ProximityField;
[SerializeField]
public float _maxDistance = 0.1f;
public float MaxDistance => _maxDistance;
[SerializeField]
private float _enterHoverDistance = 0f;
[SerializeField]
private float _releaseDistance = 0.25f;
[HideInInspector, SerializeField, Optional]
private int _tiebreakerScore = 0;
[HideInInspector, SerializeField, Optional]
private Collider _volumeMask = null;
[HideInInspector, SerializeField, Optional]
private Transform hitPoint;
[HideInInspector, SerializeField, Optional]
private Transform proximityFieldPoint;
public Collider VolumeMask { get => _volumeMask; }
/// <summary>
/// 拖拽阈值的配置
/// </summary>
[HideInInspector, Serializable]
public class DragThresholdingConfig
{
public bool Enabled;
public float SurfaceThreshold;
public float ZThreshold;
public ProgressCurve DragEaseCurve;
}
[HideInInspector, SerializeField]
private DragThresholdingConfig _dragThresholding =
new DragThresholdingConfig()
{
Enabled = true,
SurfaceThreshold = 0.01f,
ZThreshold = 0.01f,
DragEaseCurve = new ProgressCurve(AnimationCurve.EaseInOut(0, 0, 1, 1), 0.05f)
};
/// <summary>
/// 位置锁定的配置
/// </summary>
[Serializable]
public class PositionPinningConfig
{
public bool Enabled;
public float MaxPinDistance;
}
/// <summary>
/// 固定位置
/// </summary>
/// <returns></returns>
[HideInInspector, SerializeField]
private PositionPinningConfig _positi
66XR-RokidAR-UXR3.0-PokeInteractable 脚本解析
于 2025-06-15 15:07:22 首次发布