Unity 2D以特定角度启动gameObject而不影响速度

时间:2018-11-08 18:04:40

标签: c# unity3d 2d

我正在做一个游戏,我需要以2个滑杆(1个角度滑杆,1个力量滑杆)定义的角度和力量射击球。我目前有以下代码来控制球的发射:

  public void shoot()
{
    float angle = angleSlider.GetComponent<Slider>().value;
    float power = powerSlider.GetComponent<Slider>().value;

    gameObject.SetActive(false);

    ball.GetComponent<Rigidbody2D>().simulated = true;

    Vector2 releaseVector = Quaternion.AngleAxis(angle, transform.up) * transform.forward;
    ball.GetComponent<Rigidbody2D>().velocity = releaseVector * (power/3);


}

使用此当前代码,除了一件事情,它几乎可以完美地工作。当角度介于30到60之间时,球会很好地发射,但是如果我将其设置为0度,则球几乎不会移动,相反,如果我将其设置为90度,则球会以更大的力量发射。我如何才能为所有度数设置一个恒定速度,以便该速度仅受电动滑块的影响?谢谢。

2 个答案:

答案 0 :(得分:2)

通常,您不应该直接设置刚体的velocity。根据{{​​3}} ...

  

在大多数情况下,您不应该直接修改速度,因为这会导致不切实际的行为。

相反,您通常希望使用Unity docsAddForce之类的API向球施加物理冲动

答案 1 :(得分:0)

那很容易..您必须标准化releaseVector。

  ball.GetComponent<Rigidbody2D>().velocity = releaseVector.normalized * (power/3);

然后根据需要调整电源。这样,您将获得所需的方向,速度取决于功率值。

如果您想知道规范化的作用,可以在这里找到更多信息; https://docs.unity3d.com/ScriptReference/Vector3.Normalize.html