Unity(C#)中其他脚本的访问函数编译并执行但不起作用

Access function from other script in Unity (C#) compiles and executes but does not function

我正在学习 Space Shooter Unity 教程,我已经到了船可以发射螺栓的地步。 (工作正常。)我认为让螺栓受船速影响可能很有趣,我认为这应该很容易。问题是预制件不能将游戏对象作为参数(这是有道理的,以防对象被破坏)。因此,我在预制对象 bolt:

中使用的脚本 Mover 中创建了一个新函数
public void AddSpeed() {    
    GetComponent<Rigidbody>().velocity = new Vector3(0.0f, 0.0f, 0.0f);
}

如果调用成功,此函数将停止 bolt,例如当我将其包含在 Mover.Start() 中时。然后,在 PlayerController 中,我在螺栓实例化后立即添加了对此函数的调用:

 GameObject clone = Instantiate(shot, shot_spawn.position, shot_spawn.rotation) as GameObject;
     clone.GetComponent<Mover>().AddSpeed(); 

这段代码编译和执行没有任何问题,但很明显 AddSpeed 没有工作(因为螺栓正常移动)。因为我没有收到任何错误反馈,所以我不确定发生了什么以及如何解决它,所以我非常感谢任何帮助。

在了解 Debug.Log 之后(在同一教程中进一步介绍),我能够自己弄清楚。

问题是 Start() 函数在实例化后没有立即执行,所以我的函数 AddSpeed(被正确调用)按预期工作,但稍后 Start() 会撤消任何更改。

我的解决方案是将玩家的速度传递给脚本 Mover 并稍后在 Start() 中添加此速度。