namespace UnityEngine.Animations.Rigging { /// /// The OverrideTransform constraint data. /// [System.Serializable] public struct OverrideTransformData : IAnimationJobData, IOverrideTransformData { /// /// The override space controls how the override source Transform /// is copied unto constrained Transform. /// [System.Serializable] public enum Space { /// Copy override world TR components into world TR components of the constrained Transform. World = OverrideTransformJob.Space.World, /// Copy override local TR components into local TR components of the constrained Transform. Local = OverrideTransformJob.Space.Local, /// Add override local TR components to local TR components of the constrained Transform. Pivot = OverrideTransformJob.Space.Pivot } [SerializeField] Transform m_ConstrainedObject; [SyncSceneToStream, SerializeField] Transform m_OverrideSource; [SyncSceneToStream, SerializeField] Vector3 m_OverridePosition; [SyncSceneToStream, SerializeField] Vector3 m_OverrideRotation; [SyncSceneToStream, SerializeField, Range(0f, 1f)] float m_PositionWeight; [SyncSceneToStream, SerializeField, Range(0f, 1f)] float m_RotationWeight; [NotKeyable, SerializeField] Space m_Space; /// public Transform constrainedObject { get => m_ConstrainedObject; set => m_ConstrainedObject = value; } /// public Transform sourceObject { get => m_OverrideSource; set => m_OverrideSource = value; } /// The override space. public Space space { get => m_Space; set => m_Space = value; } /// The override position. This is taken into account only if sourceObject is null. public Vector3 position { get => m_OverridePosition; set => m_OverridePosition = value; } /// The override rotation. This is taken into account only if sourceObject is null. public Vector3 rotation { get => m_OverrideRotation; set => m_OverrideRotation = value; } /// The weight for which override position has an effect on constrained Transform. This is a value in between 0 and 1. public float positionWeight { get => m_PositionWeight; set => m_PositionWeight = Mathf.Clamp01(value); } /// The weight for which override rotation has an effect on constrained Transform. This is a value in between 0 and 1. public float rotationWeight { get => m_RotationWeight; set => m_RotationWeight = Mathf.Clamp01(value); } /// int IOverrideTransformData.space => (int)m_Space; /// string IOverrideTransformData.positionWeightFloatProperty => ConstraintsUtils.ConstructConstraintDataPropertyName(nameof(m_PositionWeight)); /// string IOverrideTransformData.rotationWeightFloatProperty => ConstraintsUtils.ConstructConstraintDataPropertyName(nameof(m_RotationWeight)); /// string IOverrideTransformData.positionVector3Property => ConstraintsUtils.ConstructConstraintDataPropertyName(nameof(m_OverridePosition)); /// string IOverrideTransformData.rotationVector3Property => ConstraintsUtils.ConstructConstraintDataPropertyName(nameof(m_OverrideRotation)); /// bool IAnimationJobData.IsValid() => m_ConstrainedObject != null; /// void IAnimationJobData.SetDefaultValues() { m_ConstrainedObject = null; m_OverrideSource = null; m_OverridePosition = Vector3.zero; m_OverrideRotation = Vector3.zero; m_Space = Space.Pivot; m_PositionWeight = 1f; m_RotationWeight = 1f; } } /// /// OverrideTransform constraint. /// [DisallowMultipleComponent, AddComponentMenu("Animation Rigging/Override Transform")] [HelpURL("https://docs.unity3d.com/Packages/com.unity.animation.rigging@1.3/manual/constraints/OverrideTransform.html")] public class OverrideTransform : RigConstraint< OverrideTransformJob, OverrideTransformData, OverrideTransformJobBinder > { /// protected override void OnValidate() { base.OnValidate(); m_Data.positionWeight = Mathf.Clamp01(m_Data.positionWeight); m_Data.rotationWeight = Mathf.Clamp01(m_Data.rotationWeight); } } }