【问题标题】:Unity3d - Jump in collision functionUnity3d - 碰撞功能跳跃
【发布时间】:2019-04-23 20:24:06
【问题描述】:

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

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


    【解决方案1】:

    OnCollisionEnter2D 只会在与地面(单帧)碰撞时运行。可能您需要为这种情况创建一个布尔值。这可能不是最好的选择。当它与地面碰撞时使其为真,当它离开地面时使其为假。然后在更新函数中编写代码。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-06-10
        • 1970-01-01
        • 1970-01-01
        • 2013-06-24
        • 2014-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多