/// <summary> /// draw sigle ik Chain /// </summary> /// <param name="globalPmdModelLibIkChain"></param> /// <param name="color"></param> internal void DrawIKChain(Transform[] boneFinalPos, IkChain singleIkChain, Color color) { //disable zbuffer device.DepthStencilState = DepthStencilState.None; int BoneCount = singleIkChain.IkNodeCount; for (int i = 0; i < BoneCount; i++) { //draw ball DrawSphere(boneFinalPos[singleIkChain.IkNodes[i]].Pos, color); //if it has a child if (i < BoneCount - 1) { DrawLine(boneFinalPos[singleIkChain.IkNodes[i]].Pos, boneFinalPos[singleIkChain.IkNodes[i + 1]].Pos, color); } else { //DrawLine(boneFinalPos[singleIkChain.IkNodes[i]].Translation, //boneFinalPos[singleIkChain.IkTarget].Translation, color); } } DrawSphere(boneFinalPos[singleIkChain.IkTarget].Pos, Color.Black); //enable zbuffer test device.DepthStencilState = DepthStencilState.Default; }
public bool Setup(Animator animator, IkChain chain, Type componentType, string weightProperty, string weightOffsetProperty, string targetOffsetProperty) { if (!chain.HasValidData()) { return(false); } // Target m_TargetOffset = chain.target.offset; if (chain.target.readFrom == TargetType.Stream) { m_EffectorStreamHandle = animator.BindStreamTransform(chain.target.target); m_UseStreamEffector = true; } else { m_EffectorSceneHandle = animator.BindSceneTransform(chain.target.target); m_UseStreamEffector = false; } // Weight if (chain.weight.useAnimatorProperty && chain.weight.propertyName != "") { m_AnimatorWeight = animator.BindStreamProperty(animator.transform, typeof(Animator), chain.weight.propertyName); m_UseAnimatorProperty = true; } m_WeightHandle = animator.BindSceneProperty(animator.transform, componentType, weightProperty); m_AnimatorWeightOffset = animator.BindSceneProperty(animator.transform, componentType, weightOffsetProperty); // Driven m_IkType = chain.driven.type; if (m_IkType == IkType.Generic) { var end = chain.driven.genericEndJoint; var mid = end.parent; var start = mid.parent; m_StartHandle = animator.BindStreamTransform(start); m_MidHandle = animator.BindStreamTransform(mid); m_EndHandle = animator.BindStreamTransform(end); } else { m_HumanLimb = chain.driven.humanoidLimb; } return(true); }
protected override Validation <string, PickupAction> CreateService( string key, string displayName, ILoggerFactory loggerFactory) { return(new PickupAction( key, displayName, toSet(Optional(Tags).Flatten()), IkChain.TrimToOption(), AnimatorPath.TrimToOption(), StatesPath.TrimToOption(), ActionState.TrimToOption(), Active, loggerFactory) { PickupDistance = PickupDistance, Animation = Animation }); }
internal void DrawIKChain(Transform[] boneFinalPos, Transform[] boneLocalBone, IkChain singleIkChain, Color color) { //disable zbuffer device.DepthStencilState = DepthStencilState.None; int BoneCount = singleIkChain.IkNodeCount; for (int i = 0; i < BoneCount; i++) { Vector3 dir = new Vector3(0, 0, 1); //draw ball DrawSphere(boneFinalPos[singleIkChain.IkNodes[i]].Pos, color); //if it has a child if (i < BoneCount - 1) { //dir = boneLocalBone[i + 1].Pos - boneLocalBone[i].Pos; DrawLine(boneFinalPos[singleIkChain.IkNodes[i]].Pos, boneFinalPos[singleIkChain.IkNodes[i + 1]].Pos, color); //dir dir = Vector3.Transform(dir, boneFinalPos[singleIkChain.IkNodes[i]].Rot); DrawLine(boneFinalPos[singleIkChain.IkNodes[i]].Pos, boneFinalPos[singleIkChain.IkNodes[i]].Pos + dir, Color.Red); } else { //DrawLine(boneFinalPos[singleIkChain.IkNodes[i]].Translation, //boneFinalPos[singleIkChain.IkTarget].Translation, color); } } DrawSphere(boneFinalPos[singleIkChain.IkTarget].Pos, Color.Black); //enable zbuffer test device.DepthStencilState = DepthStencilState.Default; }