void MoveFoot(HumanBodyBones _type, Vector3 relativePosition) { JointDriver[] bones = skeleton.GetBones(_type); float[] xAngles; if (photonView.IsMine) { xAngles = skeleton.CalculateAngles(bones, relativePosition, bones[0].GetPrimaryAxis()); skeleton.SetConfiguration(_type, xAngles); } else { xAngles = skeleton.GetConfiguration(_type); } bones[0].rb.MoveRotation(bones[0].rb.rotation * Quaternion.Euler(0, relativePosition.x * 0.01f, 0)); bones[0].DriveJoint(new Vector3(-xAngles[0] - xAngles[2], relativePosition.x, 0f), JointDriveState.Position); bones[1].DriveJoint(new Vector3(-xAngles[3] + 180f, 0f), JointDriveState.Position); bones[2].DriveJoint(new Vector3(-xAngles[1] + xAngles[0], 0f), JointDriveState.Position); Debug.DrawLine(bones[0].GetJointPos(), bones[0].GetJointPos() + bones[0].transform.TransformVector(relativePosition), Color.red); if (_type == HumanBodyBones.LeftFoot) { lines[0].SetPosition(0, bones[0].GetJointPos()); lines[0].SetPosition(1, bones[0].GetJointPos() + bones[0].transform.TransformVector(relativePosition)); } else { lines[1].SetPosition(0, bones[0].GetJointPos()); lines[1].SetPosition(1, bones[0].GetJointPos() + bones[0].transform.TransformVector(relativePosition)); } }