namespace UnityEngine.Animations.Rigging { /// /// The Blend constraint data. /// [System.Serializable] public struct BlendConstraintData : IAnimationJobData, IBlendConstraintData { [SerializeField] Transform m_ConstrainedObject; [SyncSceneToStream, SerializeField] Transform m_SourceA; [SyncSceneToStream, SerializeField] Transform m_SourceB; [SyncSceneToStream, SerializeField] bool m_BlendPosition; [SyncSceneToStream, SerializeField] bool m_BlendRotation; [SyncSceneToStream, SerializeField, Range(0f, 1f)] float m_PositionWeight; [SyncSceneToStream, SerializeField, Range(0f, 1f)] float m_RotationWeight; [NotKeyable, SerializeField] bool m_MaintainPositionOffsets; [NotKeyable, SerializeField] bool m_MaintainRotationOffsets; /// public Transform constrainedObject { get => m_ConstrainedObject; set => m_ConstrainedObject = value; } /// public Transform sourceObjectA { get => m_SourceA; set => m_SourceA = value; } /// public Transform sourceObjectB { get => m_SourceB; set => m_SourceB = value; } /// Toggles whether position is blended in the constraint. public bool blendPosition { get => m_BlendPosition; set => m_BlendPosition = value; } /// Toggles whether rotation is blended in the constraint. public bool blendRotation { get => m_BlendRotation; set => m_BlendRotation = value; } /// /// Specifies the weight with which to blend position. /// A weight of zero will result in the position of sourceObjectA, while a weight of one will result in the position of sourceObjectB. /// public float positionWeight { get => m_PositionWeight; set => m_PositionWeight = Mathf.Clamp01(value); } /// /// Specifies the weight with which to blend rotation. /// A weight of zero will result in the rotation of sourceObjectA, while a weight of one will result in the rotation of sourceObjectB. /// public float rotationWeight { get => m_RotationWeight; set => m_RotationWeight = Mathf.Clamp01(value); } /// public bool maintainPositionOffsets { get => m_MaintainPositionOffsets; set => m_MaintainPositionOffsets = value; } /// public bool maintainRotationOffsets { get => m_MaintainRotationOffsets; set => m_MaintainRotationOffsets = value; } /// string IBlendConstraintData.blendPositionBoolProperty => ConstraintsUtils.ConstructConstraintDataPropertyName(nameof(m_BlendPosition)); /// string IBlendConstraintData.blendRotationBoolProperty => ConstraintsUtils.ConstructConstraintDataPropertyName(nameof(m_BlendRotation)); /// string IBlendConstraintData.positionWeightFloatProperty => ConstraintsUtils.ConstructConstraintDataPropertyName(nameof(m_PositionWeight)); /// string IBlendConstraintData.rotationWeightFloatProperty => ConstraintsUtils.ConstructConstraintDataPropertyName(nameof(m_RotationWeight)); /// bool IAnimationJobData.IsValid() => !(m_ConstrainedObject == null || m_SourceA == null || m_SourceB == null); /// void IAnimationJobData.SetDefaultValues() { m_ConstrainedObject = null; m_SourceA = null; m_SourceB = null; m_BlendPosition = true; m_BlendRotation = true; m_PositionWeight = 0.5f; m_RotationWeight = 0.5f; m_MaintainPositionOffsets = false; m_MaintainRotationOffsets = false; } } /// /// Blend constraint. /// [DisallowMultipleComponent, AddComponentMenu("Animation Rigging/Blend Constraint")] [HelpURL("https://docs.unity3d.com/Packages/com.unity.animation.rigging@1.3/manual/constraints/BlendConstraint.html")] public class BlendConstraint : RigConstraint< BlendConstraintJob, BlendConstraintData, BlendConstraintJobBinder > { /// protected override void OnValidate() { base.OnValidate(); m_Data.positionWeight = Mathf.Clamp01(m_Data.positionWeight); m_Data.rotationWeight = Mathf.Clamp01(m_Data.rotationWeight); } } }