You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
using UnityEngine;
 | 
						|
using System.Collections;
 | 
						|
 | 
						|
namespace RootMotion.FinalIK {
 | 
						|
 | 
						|
	/// <summary>
 | 
						|
	/// Contains and manages a set of constraints.
 | 
						|
	/// </summary>
 | 
						|
	[System.Serializable]
 | 
						|
	public class Constraints {
 | 
						|
		
 | 
						|
		#region Main Interface
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// The transform.
 | 
						|
		/// </summary>
 | 
						|
		public Transform transform;
 | 
						|
		/// <summary>
 | 
						|
		/// The target.
 | 
						|
		/// </summary>
 | 
						|
		public Transform target;
 | 
						|
		/// <summary>
 | 
						|
		/// The position offset.
 | 
						|
		/// </summary>
 | 
						|
		public Vector3 positionOffset;
 | 
						|
		/// <summary>
 | 
						|
		/// The position to lerp to by positionWeight
 | 
						|
		/// </summary>
 | 
						|
		public Vector3 position;
 | 
						|
		/// <summary>
 | 
						|
		/// The weight of lerping to position
 | 
						|
		/// </summary>
 | 
						|
		[Range(0f, 1f)]
 | 
						|
		public float positionWeight;
 | 
						|
		/// <summary>
 | 
						|
		/// The rotation offset.
 | 
						|
		/// </summary>
 | 
						|
		public Vector3 rotationOffset;
 | 
						|
		/// <summary>
 | 
						|
		/// The rotation to slerp to by rotationWeight
 | 
						|
		/// </summary>
 | 
						|
		public Vector3 rotation;
 | 
						|
		/// <summary>
 | 
						|
		/// The weight of slerping to rotation
 | 
						|
		/// </summary>
 | 
						|
		[Range(0f, 1f)]
 | 
						|
		public float rotationWeight;
 | 
						|
 | 
						|
        private Vector3 defaultLocalPosition;
 | 
						|
        private Quaternion defaultLocalRotation;
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Determines whether this instance is valid.
 | 
						|
		/// </summary>
 | 
						|
		public bool IsValid() {
 | 
						|
			return transform != null;
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Initiate to the specified transform.
 | 
						|
		/// </summary>
 | 
						|
		public void Initiate(Transform transform) {
 | 
						|
			this.transform = transform;
 | 
						|
			this.position = transform.position;
 | 
						|
			this.rotation = transform.eulerAngles;
 | 
						|
            defaultLocalPosition = transform.localPosition;
 | 
						|
            defaultLocalRotation = transform.localRotation;
 | 
						|
		}
 | 
						|
 | 
						|
        public void FixTransforms()
 | 
						|
        {
 | 
						|
            transform.localPosition = defaultLocalPosition;
 | 
						|
            transform.localRotation = defaultLocalRotation;
 | 
						|
        }
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Updates the constraints.
 | 
						|
		/// </summary>
 | 
						|
		public void Update() {
 | 
						|
			if (!IsValid()) return;
 | 
						|
 | 
						|
			// Position
 | 
						|
			if (target != null) position = target.position;
 | 
						|
			transform.position += positionOffset;
 | 
						|
			if (positionWeight > 0f) transform.position = Vector3.Lerp(transform.position, position, positionWeight);
 | 
						|
 | 
						|
			// Rotation
 | 
						|
			if (target != null) rotation = target.eulerAngles;
 | 
						|
			transform.rotation = Quaternion.Euler(rotationOffset) * transform.rotation;
 | 
						|
			if (rotationWeight > 0f) transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(rotation), rotationWeight);
 | 
						|
		}
 | 
						|
		
 | 
						|
		#endregion Main Interface
 | 
						|
	}
 | 
						|
}
 |