玩家运动压倒其他游戏对象的外力/速度

时间:2018-03-23 10:04:12

标签: c# unity3d 2d

我正在尝试将外部速度(来自外部游戏对象)添加到我的角色上。问题在于,当力量被添加到发送运动输入到角色时,外力会被拒绝"并且只被称为一帧(我假设)。

这是因为在播放器移动脚本中我使用特定的功能来设置移动,并且每次统一获得移动输入时,重新定义(通过将速度设置为maxMovementSpeed)速度。 下面是移动功能,用于设置x轴的移动。

    private void SetMovement()
    {
        Vector3 vel = _rb2d.velocity;

        if(_direction == Direction.Right)
        {
            _speed = maxMovementSpeed;            
        }
        else if (_direction == Direction.Left)
        {
            _speed = -maxMovementSpeed;            
        }

        vel.x = _speed;

        if(_direction != Direction.Idle)
        {
            _rb2d.velocity = vel;
        }
    }

所以再一次,在我的情况下,我想添加一个速度" bump"或来自弹丸的力量。因此,例如,根据其方向,角色将能够跳到它上面,并在Y轴上获得提升以达到更高的高度!如果需要查看来自其他对象的外力,则代码如下所示。

    void OnCollisionEnter2D(Collision2D collision)
    {

        if (collision.gameObject.name == "Vagrant")
        {
            // VARIANT ETT \\
            collision.gameObject.GetComponent<Rigidbody2D>().velocity = new Vector2(0, 0);
            collision.gameObject.GetComponent<Rigidbody2D>().velocity += projMovement.rb.velocity.normalized * boost;
        }
    }

所以问题是我想得到一个强制升级&#34;来自我的射弹,它被召唤,并且助推器起作用。但是当输入被识别时,它只是将速度直接设置为大约60(而不是我的提升,即+150等)。所以当你站立不动并且射弹击中你时,助推器会起作用。

问题是,是否有一种简单的方法来修复/改变这种更好的方法来处理运动?例如,当在x轴上运行时,不直接设置固定值。我不能写+ =而不是只有=,因为我不想要&#34;常数&#34;添加/加速,如果这是有道理的。

1 个答案:

答案 0 :(得分:1)

我建议你在播放器中添加一个AddForce函数,它会添加力。  不要从外部修改其他脚本中的值,这样就可以始终控制玩家对玩家脚本的反应。

现在谈论这个问题

不要修改刚体的速度值,使用addForce方法,让它(Rigidbody)给出正值或负值!当你使用方法addForce时,它在内部使用刚体速度的当前值,所以你不会有任何意外的行为