2016-08-04 42 views
0

我有一個在場景中的立方體,當您按下其中一個箭頭鍵時,它會向上移動並按箭頭鍵的方向。當立方體已經在空中的時候點擊,它在它回到地面之前再次跳躍。我該如何製作,以便立方體在重新落地時不會再跳起來?這是到目前爲止我的代碼:當一個立方體移動時,我怎樣才能使它在空氣中不能跳躍?

public class MovePlayer : MonoBehaviour { 

Vector3 endPos; 
Vector3 startPos; 


bool jumping = false; 

// Update is called once per frame 
void Update() { 
    endPos = gameObject.transform.position; 
    startPos = gameObject.transform.position; 

     if (Input.GetButtonDown ("up") && gameObject.transform.position == endPos) { 

      transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World); 
      transform.Translate(Vector3.forward * 50 * Time.deltaTime, Space.World); 
     } 
    else if (Input.GetButtonDown ("down") && gameObject.transform.position == endPos) { 
     transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World); 
     transform.Translate(-Vector3.forward * 50 * Time.deltaTime, Space.World); 
    } 
    else if (Input.GetButtonDown ("left") && gameObject.transform.position == endPos) { 
     transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World); 
     transform.Translate(Vector3.left * 50 * Time.deltaTime, Space.World); 
    } 
    else if (Input.GetButtonDown ("right") && gameObject.transform.position == endPos) { 
     transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World); 
     transform.Translate(Vector3.right * 50 * Time.deltaTime, Space.World); 
    } 

} 
} 

回答

0

讓布爾jumping假,如果玩家在接觸/與地面發生碰撞。如果不是這樣的話。然後添加並檢查它與跳轉輸入條件,所以真正不會讓跳躍和假會讓跳。

用於檢測地面使用一些代碼如下。根據需要標記地面。播放器和地面都需要collider組件,其中至少有一個組件需要附加Rigidbody組件。

void OnCollisionEnter (Collision other) 
{ 
if (other.collider.tag == "ground_tag") 
{ 
Jumping = false; 
} 
} 

void OnCollisionExit (Collision other) 
{ 
if (other.collider.tag == "ground_tag") 
{ 
Jumping = true; 
} 
} 
0

您可以使用角色腳部到地面的光線投射。如果那條光線遇到了什麼 - 你就在地面上。

var origin = transform.position; 
var onGround = Raycast(origin, Vector3.down, 1f); 

請注意,您需要從腳上投射射線,因此您可能需要更改origin的值。

這種方法非常好,因爲您可以使用圖層蒙版和很多其他選項。