72 lines
2.3 KiB
C#
72 lines
2.3 KiB
C#
using Unity.Mathematics;
|
|
using UnityEngine.XR.Interaction.Toolkit.AffordanceSystem.Receiver.Primitives;
|
|
|
|
namespace UnityEngine.XR.Interaction.Toolkit.Samples.Hands
|
|
{
|
|
/// <summary>
|
|
/// Affordance receiver applying a Vector3 (Float3) affordance theme to a Transform local position.
|
|
/// Broadcasts new affordance value with Unity Event.
|
|
/// </summary>
|
|
[AddComponentMenu("Affordance System/Receiver/Transformation/Local Position Offset Affordance Receiver", 12)]
|
|
public class LocalPositionOffsetAffordanceReceiver : Vector3AffordanceReceiver
|
|
{
|
|
[SerializeField]
|
|
[Tooltip("Transform on which to apply a local translation value.")]
|
|
Transform m_TransformToTranslate;
|
|
|
|
/// <summary>
|
|
/// Transform on which to apply a local translation value.
|
|
/// </summary>
|
|
public Transform transformToTranslate
|
|
{
|
|
get => m_TransformToTranslate;
|
|
set
|
|
{
|
|
m_TransformToTranslate = value;
|
|
m_HasTransformToTranslate = m_TransformToTranslate != null;
|
|
}
|
|
}
|
|
|
|
bool m_HasTransformToTranslate;
|
|
float3 m_InitialOffset = float3.zero;
|
|
|
|
/// <inheritdoc/>
|
|
protected override void OnEnable()
|
|
{
|
|
base.OnEnable();
|
|
m_HasTransformToTranslate = m_TransformToTranslate != null;
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
protected override float3 GetCurrentValueForCapture()
|
|
{
|
|
if (m_HasTransformToTranslate)
|
|
{
|
|
m_InitialOffset = m_TransformToTranslate.localPosition;
|
|
}
|
|
|
|
return float3.zero;
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
protected override void OnAffordanceValueUpdated(float3 newValue)
|
|
{
|
|
if (m_HasTransformToTranslate)
|
|
{
|
|
m_TransformToTranslate.localPosition = m_InitialOffset + newValue;
|
|
}
|
|
|
|
base.OnAffordanceValueUpdated(newValue);
|
|
}
|
|
|
|
/// <summary>
|
|
/// See <see cref="MonoBehaviour"/>.
|
|
/// </summary>
|
|
void OnValidate()
|
|
{
|
|
if (m_TransformToTranslate == null)
|
|
m_TransformToTranslate = transform;
|
|
}
|
|
}
|
|
}
|