[英]Unity 2D launch gameObject at a specific angle without affecting speed
我正在做一个游戏,我需要以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度,则球会以更大的力量发射。 我如何才能为所有度数设置一个恒定速度,以便该速度仅受电动滑块的影响? 谢谢。
通常,您不应该直接设置刚体的velocity
。 根据Unity文档 ...
在大多数情况下,您不应该直接修改速度,因为这会导致不切实际的行为。
相反,您通常希望使用诸如AddForce或AddRelativeForce之类的API向球施加物理冲动
这很容易..您必须标准化releaseVector。
ball.GetComponent<Rigidbody2D>().velocity = releaseVector.normalized * (power/3);
然后根据需要调整电源。 这样,您将获得所需的方向,速度取决于功率值。
如果您想知道规范化的作用,可以在这里找到更多信息。 https://docs.unity3d.com/ScriptReference/Vector3.Normalize.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.