[英]How can i get it so i dont have my character infinitely jump?
這是我到目前為止編寫的代碼,它使玩家控制的角色能夠不斷跳躍,我只希望他們能夠在地面上跳躍。
void Update()
{
this.transform.Translate(Input.GetAxis("Horizontal"), 0, 0);
xdirectionMovement = Input.GetAxis("Horizontal") * runspeed; //GetAxisRaw("Horizontal")
if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space)) //makes player jump
{
GetComponent<Rigidbody2D>().AddForce(jumpdistance, ForceMode2D.Impulse);
確保您只允許在角色接地時跳躍。 檢查這一點的一種方法是使用向下的光線投射並查看命中是否低於某個閾值:
void Update()
{
print(IsGrounded());
}
bool IsGrounded()
{
const float distanceToGround = 1f;
return Physics.Raycast(
transform.position, -Vector3.up, distanceToGround) != null;
}
另一種方法是使用 CharacterController 組件並檢查其布爾值:
CharacterController controller = null;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
print(controller.isGrounded);
}
另一種是監聽碰撞事件並設置一個布爾值:
bool collides = false;
void FixedUpdate()
{
print(collides);
collides = false;
}
void OnCollisionStay(Collision collision)
{
collides = true;
}
請注意,有時,留出一點余地是很好的可用性實踐,這樣用戶即使錯過地面幾個像素或錯過幾毫秒的時間也可以跳躍。 祝你好運!
添加一個 bool 來檢查玩家是否接地,添加向量和碰撞器來確定玩家相對於地面的位置。
private BoxCollider2D box;
Vector3 maxValue= box.bounds.max;
Vector3 minValue=box.bounds.minValue;
Vector2 x = new Vector2(max.x, minValue.y -0.1f);
Vector2 y = new Vector2(minValue.x, minValue.y - 0.1f);
Collider2D ground = Physics.OverlapArea(x,y);
bool jump = false;
if (ground != null)
{
jump = true;
}
最后,您可以將 bool 添加到您的輸入中,例如,
if (Input.GetKeyDown(KeyCode.Space) && jump == true)
{
//player jump
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.