如何制作一个水平推动玩家的弹簧对象?

问题描述 投票:0回答:1
public class spring : MonoBehaviour
{
    [SerializeField] public float jumpHeight = 10f;

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            collision.gameObject.GetComponent<Rigidbody2D>().AddForce(Vector2.up * jumpHeight, ForceMode2D.Impulse);
        }
    }
}

我做了一个向上的弹簧,它很容易做,我以为做一个横向的弹簧也很容易,但我现在运气不好。上面的脚本就是说向上的spring脚本。我也知道我必须做一些有方向的事情,因为玩家会朝弹簧击中它,然后被击退。

我尝试调整我的向上弹簧脚本,以便您按照脚本中指定的方向前进(例如,

Vector2.right
向右走),但我猜它根本不会也不能那样工作。当我试图解决我的问题时,我在网上看到的所有帖子似乎都是关于其他统一的东西,巧合地称为弹簧,或者如何作为玩家推动一个物体

编辑:

Vector2.right
的实际结果不会改变方向,它只是弹起玩家。另外,我将 JumpHeight 变量重命名为 rightForce,但我确信这与它不起作用无关。 Unity没有显示错误

c# unity-game-engine
1个回答
0
投票

让我们改进它! 我们将使用 tranform.up 作为方向(这是选择游戏对象时可以看到的绿色箭头)

确保你的弹簧精灵指向这个绿色箭头。 然后只需更改脚本以使用 tranform.up

public class spring : MonoBehaviour
{
    [SerializeField] public float jumpForce = 10f;

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            collision.gameObject.GetComponent<Rigidbody2D>().AddForce(transform.up * jumpForce , ForceMode2D.Impulse);
        }
    }
}

注意:这个“spring”脚本应该位于 spring 的根目录中,而不是子目录中。

现在,如果您旋转弹簧,它应该正确地将您的玩家发送到与绿色箭头相同的方向:) 不要忘记你的角色和地面之间存在物理摩擦,因此你可能需要增加水平弹簧的力量来抵消这种摩擦。

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