namespace UnityEngine.Animations.Rigging { /// /// The MultiRotation constraint job. /// [System.Serializable] public struct MultiRotationConstraintData : IAnimationJobData, IMultiRotationConstraintData { [SerializeField] Transform m_ConstrainedObject; [SyncSceneToStream, SerializeField, WeightRange(0f, 1f)] WeightedTransformArray m_SourceObjects; [SyncSceneToStream, SerializeField] Vector3 m_Offset; [NotKeyable, SerializeField] Vector3Bool m_ConstrainedAxes; [NotKeyable, SerializeField] bool m_MaintainOffset; /// public Transform constrainedObject { get => m_ConstrainedObject; set => m_ConstrainedObject = value; } /// public WeightedTransformArray sourceObjects { get => m_SourceObjects; set => m_SourceObjects = value; } /// public bool maintainOffset { get => m_MaintainOffset; set => m_MaintainOffset = value; } /// Post-Rotation offset applied to the constrained Transform. public Vector3 offset { get => m_Offset; set => m_Offset = value; } /// public bool constrainedXAxis { get => m_ConstrainedAxes.x; set => m_ConstrainedAxes.x = value; } /// public bool constrainedYAxis { get => m_ConstrainedAxes.y; set => m_ConstrainedAxes.y = value; } /// public bool constrainedZAxis { get => m_ConstrainedAxes.z; set => m_ConstrainedAxes.z = value; } /// string IMultiRotationConstraintData.offsetVector3Property => ConstraintsUtils.ConstructConstraintDataPropertyName(nameof(m_Offset)); /// string IMultiRotationConstraintData.sourceObjectsProperty => ConstraintsUtils.ConstructConstraintDataPropertyName(nameof(m_SourceObjects)); /// bool IAnimationJobData.IsValid() { if (m_ConstrainedObject == null || m_SourceObjects.Count == 0) return false; foreach (var src in m_SourceObjects) if (src.transform == null) return false; return true; } /// void IAnimationJobData.SetDefaultValues() { m_ConstrainedObject = null; m_ConstrainedAxes = new Vector3Bool(true); m_SourceObjects.Clear(); m_MaintainOffset = false; m_Offset = Vector3.zero; } } /// /// MultiRotation constraint. /// [DisallowMultipleComponent, AddComponentMenu("Animation Rigging/Multi-Rotation Constraint")] [HelpURL("https://docs.unity3d.com/Packages/com.unity.animation.rigging@1.3/manual/constraints/MultiRotationConstraint.html")] public class MultiRotationConstraint : RigConstraint< MultiRotationConstraintJob, MultiRotationConstraintData, MultiRotationConstraintJobBinder > { /// protected override void OnValidate() { base.OnValidate(); var weights = m_Data.sourceObjects; WeightedTransformArray.OnValidate(ref weights); m_Data.sourceObjects = weights; } } }