相同的预制件以不同的速度实例化
本文关键字:速度 实例化 | 更新日期: 2023-09-27 18:24:55
我正在尝试设置一个对象,以便在发射时以4种方式实例化子弹。例如:
Assuming 'A' is the object:
^
|
<- A ->
|
v
我正试着把它设置成按照上面指定的方向拍摄4种方式。当前设置工作正常,预制件按照指示正确实例化。问题不是所有的子弹都以相同的速度射出。右边和下面的射得正确,而上面和左边的射得慢得多。
所有方向的代码设置都是完全相同的,并且所有方向都使用相同的预制件和相同的速度,因此混淆了速度差异的原因。请提供建议。谢谢
到项目的Dropbox链接
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);
}
}
我下载了这个项目,并注意到顶部的&左侧产卵点旋转错误。
- 向左旋转应为:270(或-90)
- 顶部旋转应为:180
就我个人而言,我会失去所有的旋转,并使用transform.right等来避免混淆
这可能是因为您在更新方法中使用了AddForce。您应该尝试使用FixedUpdate方法。它在在线文档中说明:
http://docs.unity3d.com/ScriptReference/Rigidbody.html
在脚本中,建议将FixedUpdate函数用作施加力和更改刚体设置的位置(而不是用于大多数其他帧更新任务的Update)。原因是物理更新是在与帧更新不一致的测量时间步长中进行的。FixedUpdate在每次物理更新之前立即调用,因此在那里所做的任何更改都将直接处理。