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.
		
		
		
		
		
			
		
			
				
	
	
		
			65 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
using UnityEngine;
 | 
						|
using System.Collections;
 | 
						|
 | 
						|
namespace RootMotion.FinalIK {
 | 
						|
 | 
						|
	/// <summary>
 | 
						|
	/// Offsets the transform from its (animated) rotation
 | 
						|
	/// </summary>
 | 
						|
	[System.Serializable]
 | 
						|
	public class ConstraintRotationOffset: Constraint {
 | 
						|
		
 | 
						|
		#region Main Interface
 | 
						|
		
 | 
						|
		/// <summary>
 | 
						|
		/// The rotation offset in world space.
 | 
						|
		/// </summary>
 | 
						|
		public Quaternion offset;
 | 
						|
		
 | 
						|
		public override void UpdateConstraint() {
 | 
						|
			if (weight <= 0) return;
 | 
						|
			if (!isValid) return;
 | 
						|
			
 | 
						|
			// Initiating
 | 
						|
			if (!initiated) {
 | 
						|
				// Storing default rotations.
 | 
						|
				defaultLocalRotation = transform.localRotation;
 | 
						|
				lastLocalRotation = transform.localRotation;
 | 
						|
				
 | 
						|
				initiated = true;
 | 
						|
			}
 | 
						|
			
 | 
						|
			// Check if rotation has changed. If true, set default local rotation to current.
 | 
						|
			if (rotationChanged) defaultLocalRotation = transform.localRotation;
 | 
						|
			
 | 
						|
			// Offsetting the rotation
 | 
						|
			transform.localRotation = defaultLocalRotation;
 | 
						|
			transform.rotation = Quaternion.Slerp(transform.rotation, offset, weight);
 | 
						|
			
 | 
						|
			// Store the current local rotation to check if it has changed in the next update.
 | 
						|
			lastLocalRotation = transform.localRotation;
 | 
						|
		}
 | 
						|
		
 | 
						|
		#endregion Main Interface
 | 
						|
		
 | 
						|
		public ConstraintRotationOffset() {}
 | 
						|
		public ConstraintRotationOffset(Transform transform) {
 | 
						|
			this.transform = transform;
 | 
						|
		}
 | 
						|
		
 | 
						|
		private Quaternion defaultRotation, defaultLocalRotation, lastLocalRotation, defaultTargetLocalRotation;
 | 
						|
		private bool initiated;
 | 
						|
		
 | 
						|
		/*
 | 
						|
		 * Check if rotation has been changed by animation or any other external script. 
 | 
						|
		 * If not, consider the object to be static and offset only from the default rotation.
 | 
						|
		 * */
 | 
						|
		private bool rotationChanged {
 | 
						|
			get {
 | 
						|
				return transform.localRotation != lastLocalRotation;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 |