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);
}
}
}