C# 获取实例化预置的速度

C# 获取实例化预置的速度,c#,unity3d,game-physics,rigid-bodies,prefab,C#,Unity3d,Game Physics,Rigid Bodies,Prefab,我从我的预置“Bullet”实例化刚体“Clone”,以便在我的项目中拍摄它们。我想得到我射出的每一颗子弹(每一个实例)的速度。在以下我的代码示例中: public GameObject throwstart; public Rigidbody Clone; public float bulletVelocity { get; set; } = 1; ... ... void Update() { if (Input.GetKeyDown(KeyCode.

我从我的预置“Bullet”实例化刚体“Clone”,以便在我的项目中拍摄它们。我想得到我射出的每一颗子弹(每一个实例)的速度。在以下我的代码示例中:

 public GameObject throwstart;
 public Rigidbody Clone;
 public float bulletVelocity { get; set; } = 1;
 ...
 ...
 void Update()
     {
         if (Input.GetKeyDown(KeyCode.Space))
         {
             Rigidbody Clone2;
             Clone2 = Instantiate(Clone, throwstart.transform.position, throwstart.transform.rotation);
             Clone2.GetComponent<Rigidbody>().AddForce(Clone2.transform.forward * bulletVelocity, ForceMode.Impulse);
             Debug.Log("Velocity Clone Instanz: " + Clone2.mass);
             Debug.Log("Velocity Clone Instanz: " + Clone2.velocity);
         }
     }
公共游戏对象throwstart;
公共刚体克隆;
公共浮点数{get;set;}=1;
...
...
无效更新()
{
if(Input.GetKeyDown(KeyCode.Space))
{
刚体克隆2;
Clone2=实例化(克隆,throwstart.transform.position,throwstart.transform.rotation);
Clone2.GetComponent().AddForce(Clone2.transform.forward*bulletVelocity,ForceMode.Pulse);
Log(“Velocity Clone Instanz:+Clone2.mass”);
Log(“Velocity Clone Instanz:+Clone2.Velocity”);
}
}

通过上面的代码,我得到了预制件的速度/质量(但速度总是(0,0,0),质量是正确的)。我做错了什么,怎么可能得到每个实例化子弹的速度?

物理只会在下一次调用中更新

所以此时,速度可能仍然是0

我宁愿简单地设置一个力,而不是一个力

Clone2.velocity = bulletVelocity;
这对于初始化子弹来说是完全好的,因为这里我们明确地想要立即改变速度

请注意,
Clone2.GetComponent()
是非常冗余的<代码>克隆2已经
刚体


如果你真的想做你目前正在尝试的事情,你可能必须等到
FixedUpdate
,然后去做

void Update()
 {
     if (Input.GetKeyDown(KeyCode.Space))
     {
         var Clone2 = Instantiate(Clone, throwstart.transform.position, throwstart.transform.rotation);
         Clone2.AddForce(Clone2.transform.forward * bulletVelocity, ForceMode.Impulse);
         
         StartCoroutine(ShowVelocity(Clone2));
     }
 }

private IEnumerator ShowVelocity(Rigidbody rigidbody)
{
    yield return new WaitForFixedUpdate();

    Debug.Log("Mass Clone Instanz: " + rigidbody.mass);
    Debug.Log("Velocity Clone Instanz: " + rigidbody.velocity);
}