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.
		
		
		
		
		
			
		
			
				
	
	
		
			79 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
using UnityEngine;
 | 
						|
using System.Collections;
 | 
						|
 | 
						|
namespace RootMotion.FinalIK {
 | 
						|
 | 
						|
	/// <summary>
 | 
						|
	/// Maps a single bone to a node in %IK Solver
 | 
						|
	/// </summary>
 | 
						|
	[System.Serializable]
 | 
						|
	public class IKMappingBone: IKMapping {
 | 
						|
		
 | 
						|
		#region Main Interface
 | 
						|
		
 | 
						|
		/// <summary>
 | 
						|
		/// The bone transform.
 | 
						|
		/// </summary>
 | 
						|
		public Transform bone;
 | 
						|
		
 | 
						|
		/// <summary>
 | 
						|
		/// The weight of maintaining the bone's rotation after solver has finished.
 | 
						|
		/// </summary>
 | 
						|
		[Range(0f, 1f)]
 | 
						|
		public float maintainRotationWeight = 1f;
 | 
						|
		
 | 
						|
		/// <summary>
 | 
						|
		/// Determines whether this IKMappingBone is valid.
 | 
						|
		/// </summary>
 | 
						|
		public override bool IsValid(IKSolver solver, ref string message) {
 | 
						|
			if (!base.IsValid(solver, ref message)) return false;
 | 
						|
			
 | 
						|
			if (bone == null) {
 | 
						|
				message = "IKMappingBone's bone is null.";
 | 
						|
				return false;
 | 
						|
			}
 | 
						|
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
		
 | 
						|
		#endregion Main Interface
 | 
						|
		
 | 
						|
		private BoneMap boneMap = new BoneMap();
 | 
						|
		
 | 
						|
		public IKMappingBone() {}
 | 
						|
		
 | 
						|
		public IKMappingBone(Transform bone) {
 | 
						|
			this.bone = bone;
 | 
						|
		}
 | 
						|
 | 
						|
		public void StoreDefaultLocalState() {
 | 
						|
			boneMap.StoreDefaultLocalState();
 | 
						|
		}
 | 
						|
		
 | 
						|
		public void FixTransforms() {
 | 
						|
			boneMap.FixTransform(false);
 | 
						|
		}
 | 
						|
		
 | 
						|
		/*
 | 
						|
		 * Initiating and setting defaults
 | 
						|
		 * */
 | 
						|
		public override void Initiate(IKSolverFullBody solver) {
 | 
						|
			if (boneMap == null) boneMap = new BoneMap();
 | 
						|
 | 
						|
			boneMap.Initiate(bone, solver);
 | 
						|
		}
 | 
						|
		
 | 
						|
		/*
 | 
						|
		 * Pre-solving
 | 
						|
		 * */
 | 
						|
		public void ReadPose() {
 | 
						|
			boneMap.MaintainRotation();
 | 
						|
		}
 | 
						|
		
 | 
						|
		public void WritePose(float solverWeight) {
 | 
						|
			// Rotating back to the last maintained rotation
 | 
						|
			boneMap.RotateToMaintain(solverWeight * maintainRotationWeight);
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |