2017-05-31 64 views
1

我試圖讓這個角色在空中停止跳躍,但問題是當它與牆壁碰撞時會跳躍。我怎樣才能阻止雙跳的人物?

因此,我試圖讓一定的時間通過之前,字符可以在下面的腳本再次跳轉,但由於某種原因,它不起作用。

如果有人有任何更有效的方式來做到這一點,我一定會很感激。

using System.Collections; 
    using System.Collections.Generic; 
    using UnityEngine; 

public class PlayerMovement : MonoBehaviour { 

public float UpSpeed; 
public Rigidbody rb; 
public float horizonSpeed; 

public bool isGrounded; 

public float gravInc = 50; 
public int counter; 
public float DownSpeed = 50; 

public int jumpCount = 0; 
public float secCount = 0; 
public bool validUp = true; 
public float sec; 


public void OnCollisionStay(Collision collision) 


{ 
    isGrounded = true; 
} 

public void OnCollisionExit(Collision collision) 
{ 
    isGrounded = false; 
} 


public void Start() 
{ 
    rb = GetComponent<Rigidbody>(); 


} 
private void Update() 
{ 



     if (secCount == (sec)) 
     { 
      validUp = true; 

     } 


    sec = Time.time; 

    if (Input.GetKeyDown ("up") && isGrounded == (true) && validUp == (true)) 
    { 
     rb.AddForce(transform.up * UpSpeed); 
     secCount = 0; 
     validUp = false; 
     secCount = sec + 3; 



    } 

    else if(Input.GetKeyDown ("right")) 
    { 
     horizonSpeed = 200; 
     rb.AddForce(transform.right * horizonSpeed); 
    } 
    else if (Input.GetKeyDown ("left")) 
    { 
     horizonSpeed = -200; 
     rb.AddForce(transform.right * horizonSpeed); 

    } 




} 
} 

回答

2

你必須做出不同的對撞機上的球員的腳(也較小)坐鎮。讓它成爲一個觸發器。

然後使用OnTriggerStay將其isGrounded變量設置爲true,並使用OnTriggerExit將其設置爲false。對於必須接觸到跳將有助於超過時序件事的所有有效的表面界定一個無形的「正當理由」層 -

void OnTriggerStay(Collider other){ 
    isGrounded = true; 
} 

void OnTriggerExit(Collider other){ 
    isGrounded = false; 
} 
+0

謝謝,我試過了,它工作。 – user8077453

+2

如果有效,請使用答案左邊的複選標記來接受它! – ashbygeek

2

我以前遇到過這個問題。

如果你只是使用時間,如果他們跳下懸崖或下山,有人可能會加倍(或三倍!)跳躍。牆壁上沒有有效的表面物體,所以玩家不能跳牆。

通過使用有效的表面標識符,您還可以製作被設計爲在不允許跳躍的情況下滑落的表面。

+0

我會如何去做這件事?我如何讓隱形地層的工作方式與其他碰撞者不同? – user8077453

+0

https://docs.unity3d.com/ScriptReference/Physics.IgnoreCollision.html可能會幫助忽略物理方面,但是當碰撞對角色爲真時,您可以使用腳本執行其他操作(如allowJump)。 –

+0

謝謝,本可以工作。 – user8077453