Unity3d - 跳转碰撞功能

问题描述 投票:0回答:2

我希望我的角色只有在他站在地上时才会跳跃。尽管我写了碰撞功能,但当按下按键时他并没有跳。问题是什么?

void OnCollisionEnter2D(Collision2D col)
{
    if (col.collider.tag == "groundTag")
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb2d.AddForce(new Vector2(rb2d.velocity.x, Jumpforce));
        }
    }
unity3d game-development
2个回答
1
投票

OnCollisionEnter2D仅在与地面碰撞时运行(单帧)。可能你需要为这种情况创建一个bool。这可能不是最好的选择。当它与地面发生碰撞时使其成为真实,并在它离开地面时使其变为虚假。然后在更新功能中编写代码。

    bool _canJump;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        rb2d.AddForce(new Vector2(rb2d.velocity.x, Jumpforce));
    }
}
void OnCollisionEnter2D(Collision2D col)
{

    if (col.collider.tag == "groundTag")
    {
        _canJump = true;
    }

}

void OnCollisionExit2D(Collision2D col)
{
    if (col.collider.tag == "groundTag")
    {
        _canJump = true;
    }

}

1
投票

只有当您输入地面触发器时才触发动作(您正在实施的功能是OnCollisionEnter2D)。只有在碰撞器与groundTag对象碰撞的同一帧上按空格键时,此功能才有效。

你可以试试OnCollisionStay2D或使用CharacterController;这应该使实现角色更容易一些。

© www.soinside.com 2019 - 2024. All rights reserved.