当一个立方体移动时,我怎样才能使它在空中时无法跳跃?

时间:2016-08-04 00:52:32

标签: c# unity3d

我有一个在场景中的立方体,当你按下其中一个箭头键时,它会向上移动并按箭头键的方向移动。在立方体已经在空中时单击时,它会再次跳回到地面之前。我怎样才能让立方体再次跳起直到它回到地面上?到目前为止,这是我的代码:

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

}
}

2 个答案:

答案 0 :(得分:0)

如果玩家与地面接触/碰撞,则使布尔jumping为假。如果不是真的。然后使用跳转输入条件添加并检查它,所以true不会让跳跃和false会让跳跃。

对于检测地面使用一些代码,如下所示。根据需要标记地面。玩家和地面都需要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;
}
}

答案 1 :(得分:0)

你可以使用从角色的脚到地面的光线投射。如果那条射线撞到了什么东西 - 你就在地上。

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

请注意,您需要从脚部投射光线,因此您可能需要更改origin值。

这种方法很好,因为你可以使用图层蒙版和许多其他选项。