我正在玩用抛物线移动的子弹进行2D游戏,但在我拍摄射弹之前,我希望能够计算它的轨迹。
fread()
此代码将rigidbody2d添加到我的项目符号(newGO)。我尝试在飞行1秒后计算一个点:
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))
不幸的是,它没有返回正确的结果。我该怎么办? 感谢您的帮助,对不起我的英语。
答案 0 :(得分:1)
我认为作为一个抛射物你应该使用Rigidbody2D.velocity设置射弹的初始速度而不是Rigidbody2D.AddForce。 (虽然文档不推荐)
这个简单的脚本预测附加对象在变量“timeLimit”确定的时间内的位置,并将“目标”游戏对象移动到该点。
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;
}
}
}
注意:子弹和目标必须位于同一点