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

时间:2015-11-08 14:01:43

标签: c# function unity3d instantiation

我正在关注Space Shooter Unity教程,我已经到了船可以射击螺栓的地步。 (工作正常。)我认为让螺栓受到船速的影响可能会很有趣,我认为应该很容易。问题是预制件不能将GameObject作为参数(在对象被销毁的情况下有意义)。因此,我在预制对象bolt中使用的脚本Mover中创建了一个新函数:

public void AddSpeed() {    
    GetComponent<Rigidbody>().velocity = new Vector3(0.0f, 0.0f, 0.0f);
}

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

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

此代码无需投诉即可编译和执行,但很明显AddSpeed无法正常工作(因为螺栓正常移动)。因为我没有得到任何错误反馈,所以我不确定发生了什么以及如何修复它,所以我真的非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

在我了解了Debug.Log之后(在同一个教程中),我能够自己解决这个问题。

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

我的解决方案是将播放器的速度传递给脚本Mover,然后在Start()中添加此速度。