簡體   English   中英

如何阻止角色跳兩次?

[英]How can i stop a character from double jumping?

我試圖使角色在空中停止跳動,但問題是當與牆壁碰撞時角色可能跳動。

所以我嘗試過一段時間才能使角色在下面的腳本中再次跳躍,但是由於某種原因,它不起作用。

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

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);

    }




}
}

您必須制作一個與玩家(也較小)的腳不同的對撞機。 使其觸發。

並使用OnTriggerStay將其isGrounded變量設置為true,並使用OnTriggerExit將其設置為false。

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

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

我之前遇到過此問題-在必須接觸以跳轉的所有有效表面上定義一個不可見的“有效接地”層將比計時更有用。

如果您僅使用計時,則從懸崖或山坡上跳下來的人可能會跳一倍(或三倍!)。 牆壁上將沒有有效的表面對象,因此玩家無法跳到牆壁上。

通過使用有效的表面標識符,您還可以制作被設計為向下滑動而不允許跳躍的表面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM