我正在做一个游戏,我需要以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度,则球会以更大的力量发射。我如何才能为所有度数设置一个恒定速度,以便该速度仅受电动滑块的影响?谢谢。
答案 0 :(得分:2)
通常,您不应该直接设置刚体的velocity
。根据{{3}} ...
在大多数情况下,您不应该直接修改速度,因为这会导致不切实际的行为。
相反,您通常希望使用Unity docs或AddForce之类的API向球施加物理冲动
答案 1 :(得分:0)
那很容易..您必须标准化releaseVector。
ball.GetComponent<Rigidbody2D>().velocity = releaseVector.normalized * (power/3);
然后根据需要调整电源。这样,您将获得所需的方向,速度取决于功率值。
如果您想知道规范化的作用,可以在这里找到更多信息; https://docs.unity3d.com/ScriptReference/Vector3.Normalize.html