Unity2D中如何计算子弹的弹道?
How to calculate the trajectory of bullet in Unity2D?
我正在玩子弹沿抛物线运动的 2D 游戏,但在我射击弹丸之前我希望能够计算出它的轨迹。
float velocity = Mathf.Min(Mathf.Max(distance, 1), 2.5f);
float cos = Mathf.Cos( (gameObject.transform.localEulerAngles.z + 90) * Mathf.Deg2Rad);
float sin = Mathf.Sin( (gameObject.transform.localEulerAngles.z + 90) * Mathf.Deg2Rad);
newGO.GetComponent<Rigidbody2D>().AddForce(velocity * new Vector3(cos, sin))
此代码将 rigidbody2d 添加到我的子弹 (newGO) 中。我尝试在使用它飞行 1 秒后计算一个点:
Debug.Log(new Vector3(source.transform.position.x + velocity * 1 * cos, source.transform.position.y + velocity * sin * 1 + Physics2D.gravity.y * 0.5f * 1));
很遗憾,return 结果不正确。我应该怎么办?
感谢您的帮助,对不起我的英语。
我认为作为弹丸你应该使用 Rigidbody2D.velocity 来设置弹丸的初始速度而不是 Rigidbody2D.AddForce。 (虽然文档不推荐)
这个简单的脚本预测附加对象在由变量 "timeLimit" 确定的时间内的位置,并将 "target" 游戏对象移动到该点。
public class Velocity : MonoBehaviour {
public GameObject target;
private float HoriInitialSpeed = 5;
private float VertInitialSpeed = 5;
private float timeLimit = 2;
private float timeElapsed=0;
void Start ()
{
float HoriPredict = HoriInitialSpeed * timeLimit;
float VertiPredict = VertInitialSpeed* timeLimit + (0.5f * Physics2D.gravity.y * timeLimit * timeLimit);
target.transform.Translate(HoriPredict, VertiPredict,0);
GetComponent<Rigidbody2D>().velocity = new Vector2(HoriInitialSpeed, VertInitialSpeed);
}
void Update () {
timeElapsed += Time.deltaTime;
if(timeElapsed >= timeLimit)
{
//stop the bullet
GetComponent<Rigidbody2D>().velocity = new Vector2(0, 0);
GetComponent<Rigidbody2D>().gravityScale = 0;
}
}
}
注意:子弹和目标一开始必须在同一点
我正在玩子弹沿抛物线运动的 2D 游戏,但在我射击弹丸之前我希望能够计算出它的轨迹。
float velocity = Mathf.Min(Mathf.Max(distance, 1), 2.5f);
float cos = Mathf.Cos( (gameObject.transform.localEulerAngles.z + 90) * Mathf.Deg2Rad);
float sin = Mathf.Sin( (gameObject.transform.localEulerAngles.z + 90) * Mathf.Deg2Rad);
newGO.GetComponent<Rigidbody2D>().AddForce(velocity * new Vector3(cos, sin))
此代码将 rigidbody2d 添加到我的子弹 (newGO) 中。我尝试在使用它飞行 1 秒后计算一个点:
Debug.Log(new Vector3(source.transform.position.x + velocity * 1 * cos, source.transform.position.y + velocity * sin * 1 + Physics2D.gravity.y * 0.5f * 1));
很遗憾,return 结果不正确。我应该怎么办? 感谢您的帮助,对不起我的英语。
我认为作为弹丸你应该使用 Rigidbody2D.velocity 来设置弹丸的初始速度而不是 Rigidbody2D.AddForce。 (虽然文档不推荐)
这个简单的脚本预测附加对象在由变量 "timeLimit" 确定的时间内的位置,并将 "target" 游戏对象移动到该点。
public class Velocity : MonoBehaviour {
public GameObject target;
private float HoriInitialSpeed = 5;
private float VertInitialSpeed = 5;
private float timeLimit = 2;
private float timeElapsed=0;
void Start ()
{
float HoriPredict = HoriInitialSpeed * timeLimit;
float VertiPredict = VertInitialSpeed* timeLimit + (0.5f * Physics2D.gravity.y * timeLimit * timeLimit);
target.transform.Translate(HoriPredict, VertiPredict,0);
GetComponent<Rigidbody2D>().velocity = new Vector2(HoriInitialSpeed, VertInitialSpeed);
}
void Update () {
timeElapsed += Time.deltaTime;
if(timeElapsed >= timeLimit)
{
//stop the bullet
GetComponent<Rigidbody2D>().velocity = new Vector2(0, 0);
GetComponent<Rigidbody2D>().gravityScale = 0;
}
}
}
注意:子弹和目标一开始必须在同一点