Unity(C#)中其他脚本的Access函数编译并执行,但不起作用
本文关键字:编译 函数 执行 不起作用 Access 脚本 其他 Unity | 更新日期: 2023-09-27 18:21:15
我正在学习Space Shooter Unity教程,我已经到了飞船可以发射螺栓的地步。(效果很好。)我觉得螺栓受船的速度影响可能很有趣,我认为这应该很容易。问题是预制件不能将GameObject作为参数(在对象被破坏的情况下,这是有道理的)。因此,我在预制对象螺栓中使用的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不起作用(因为螺栓移动正常)。因为我没有收到任何错误反馈,我不确定发生了什么以及如何修复,所以我真的很感谢任何帮助。
在我了解了Debug.Log之后(在同一教程中进一步介绍),我能够自己解决它。
问题是,Start()函数不是在实例化后立即执行的,所以我的函数AddSpeed(调用正确)按预期工作,但后来的Start()会撤消任何更改。
我的解决方案是将玩家的速度传递给脚本Mover,然后在Start()中添加这个速度。