如何阻止双重跳跃角色?

时间:2017-05-31 23:43:34

标签: c# unity3d

我试图让角色在空中停止跳跃,但问题是它在与墙壁碰撞时会跳跃。

所以我尝试在角色可以在下面的脚本中再次跳转之前经过一定的时间,但由于某种原因它不起作用。

如果有人有更有效的方式这样做我肯定会感激。

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 个答案:

答案 0 :(得分:2)

你必须制作一个位于玩家脚下的不同对撞机(也更小)。把它作为一个触发器。

使用OnTriggerStay将其isGrounded变量设置为true,使用OnTriggerExit将其设置为false。

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

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

答案 1 :(得分:2)

我之前遇到过这个问题 - 定义一个看不见的&#34;有效的地面&#34;必须联系到跳转的所有有效曲面上的图层将比计时更有帮助。

如果你只是使用计时,如果他们跳下悬崖或下山,有人可以加倍(或三倍!)跳跃。墙壁上没有有效的表面物体,所以玩家不能跳墙。

通过使用有效的曲面标识符,您还可以制作旨在向下滑动而不允许跳跃的曲面。