void InclineForce() { Ray ray = new Ray(transform.position, -Vector3.up); //---------debug normal vector ---------- Debug.DrawRay(ray.origin, ray.direction, Color.black); //--------------------------get inclineAngle-------------------- if (Physics.Raycast(ray, out inclineHit, 2)) { //---------debug normal vector ---------- Debug.DrawRay(inclineHit.point, inclineHit.normal * 5, Color.blue); inclineAngle = Vector3.Angle(-ray.direction, inclineHit.normal); if (isDebugMessage) { print("inclineAngle = " + inclineAngle); } if (inclineAngle == 0) { //------------判別是否在斜坡上按右鍵,如果有開啟修正--------------- if (inclinedirection != InclineDirection.level && isMouseRButton) { isInclineRight = true; } //----------------------------------------------------------- inclinedirection = InclineDirection.level; inclineForce = 0; return; } //------------判別是否在平地上按右鍵,如果有開啟修正--------------- else if (inclinedirection == InclineDirection.level && isMouseRButton) { isLevelRight = true; } //----------------------------------------------------------- } //---------------------------------------------------------------- ray = new Ray(transform.position - new Vector3(0, 0.4f, 0), transform.TransformDirection(Vector3.forward)); Debug.DrawRay(ray.origin, ray.direction, Color.yellow); //--------------------------handle negative incline--------------------------------------- if (Physics.Raycast(ray, out inclineHit, 1) && inclineHit.collider.tag == "Finish") { inclinedirection = InclineDirection.negative; inclineForce = -GretaWeight *gravity *Mathf.Sin(inclineAngle *Mathf.PI / 180) / 1000; return; } //--------------------------handle positive incline--------------------------------------- else if (Physics.Raycast(ray.origin, -ray.direction, out inclineHit, 1) && inclineHit.collider.tag == "Finish") { Debug.DrawRay(ray.origin, -ray.direction, Color.yellow); inclinedirection = InclineDirection.positive; inclineForce = GretaWeight * gravity * Mathf.Sin(inclineAngle * Mathf.PI / 180) / 1000; } }
void InclineForce() { Ray ray = new Ray(transform.position, -Vector3.up); //---------debug normal vector ---------- Debug.DrawRay(ray.origin, ray.direction, Color.black); //--------------------------get inclineAngle-------------------- if (Physics.Raycast(ray, out inclineHit, 2)) { //---------debug normal vector ---------- Debug.DrawRay(inclineHit.point, inclineHit.normal * 5, Color.blue); inclineAngle = Vector3.Angle(-ray.direction, inclineHit.normal); if (isDebugMessage) print("inclineAngle = " + inclineAngle); if (inclineAngle == 0) { //------------�P�O�O�_�b�שY�W���k��A�p�G���}�ҭץ�--------------- if (inclinedirection != InclineDirection.level && isMouseRButton) isInclineRight = true; //----------------------------------------------------------- inclinedirection = InclineDirection.level; inclineForce = 0; return; } //------------�P�O�O�_�b���a�W���k��A�p�G���}�ҭץ�--------------- else if (inclinedirection == InclineDirection.level && isMouseRButton) isLevelRight = true; //----------------------------------------------------------- } //---------------------------------------------------------------- ray = new Ray(transform.position - new Vector3(0, 0.4f, 0), transform.TransformDirection(Vector3.forward)); Debug.DrawRay(ray.origin, ray.direction, Color.yellow); //--------------------------handle negative incline--------------------------------------- if (Physics.Raycast(ray, out inclineHit, 1) && inclineHit.collider.tag == "Finish") { inclinedirection = InclineDirection.negative; inclineForce = -GretaWeight * gravity * Mathf.Sin(inclineAngle * Mathf.PI / 180) / 1000; return; } //--------------------------handle positive incline--------------------------------------- else if (Physics.Raycast(ray.origin, -ray.direction, out inclineHit, 1) && inclineHit.collider.tag == "Finish") { Debug.DrawRay(ray.origin, -ray.direction, Color.yellow); inclinedirection = InclineDirection.positive; inclineForce = GretaWeight * gravity * Mathf.Sin(inclineAngle * Mathf.PI / 180) / 1000; } }