我正在尝试设置一个对象,以便在发射时以4种方式实例化子弹。例如如下:
Assuming 'A' is the object:
^
|
<- A ->
|
v
我正在尝试将其设置为按照上面指定的方向拍摄4种方式。当前设置有效,预制件在方向上正确实例化。问题不是所有人都以相同的速度射击。右侧和右侧射击正确,而顶部和左侧射击速度较慢。
代码设置对于所有方向完全相同,并且所有方向都使用相同的预制件和相同的速度,因此混淆了为什么速度的差异。请指教。谢谢。
public Rigidbody bulletPrefab;
//empty gameobjects to locate the positions
public Transform bulletStartPosRight, bulletStartPosLeft, bulletStartPosTop, bulletStartPosBottom;
private float bulletSpeed = 300;
// Update is called once per frame
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
Rigidbody bulletInstance1, bulletInstance2, bulletInstance3, bulletInstance4;
bulletInstance1 = Instantiate(bulletPrefab, bulletStartPosRight.position, bulletStartPosRight.rotation) as Rigidbody;
//the force is always forward. I rotated the empty gameobjects in Unity instead of changing the code here to forward,up,right and so on.
bulletInstance1.AddForce(bulletStartPosRight.forward * bulletSpeed);
bulletInstance2 = Instantiate(bulletPrefab, bulletStartPosLeft.position, bulletStartPosLeft.rotation) as Rigidbody;
bulletInstance2.AddForce(bulletStartPosLeft.forward * bulletSpeed);
bulletInstance3 = Instantiate(bulletPrefab, bulletStartPosTop.position, bulletStartPosTop.rotation) as Rigidbody;
bulletInstance3.AddForce(bulletStartPosTop.forward * bulletSpeed);
bulletInstance4 = Instantiate(bulletPrefab, bulletStartPosBottom.position, bulletStartPosBottom.rotation) as Rigidbody;
bulletInstance4.AddForce(bulletStartPosBottom.forward * bulletSpeed);
}
}
答案 0 :(得分:0)
可能是因为您在更新方法中使用了AddForce。您应该尝试使用FixedUpdate方法。它在以下在线文档中说明:
http://docs.unity3d.com/ScriptReference/Rigidbody.html
在脚本中,建议使用FixedUpdate函数作为应用力和更改Rigidbody设置的位置(而不是Update,用于大多数其他帧更新任务)。其原因是物理更新是在测量的时间步骤中执行的,这些步骤与帧更新不一致。在每次物理更新之前立即调用FixedUpdate,因此将在那里进行任何更改。
答案 1 :(得分:0)
我下载了这个项目并注意到了顶级&amp;左产卵点以错误的方式旋转。
就个人而言,我会失去所有轮换并使用transform.right等来避免混淆