UnityException: Find is not allowed to be called from a MonoBehaviour constructor (or instance field initializer), call it in Awake or Start instead. Called from MonoBehaviour 'boom' on game object 'fire'. See "Script Serialization" page in the Unity Manual for further details.
时间: 2024-01-21 13:05:06 浏览: 164
这个异常出现的原因是,在 MonoBehaviour 的构造函数中或实例字段初始化程序中,不允许调用 Find 方法。这是因为在构造函数或实例字段初始化程序中,游戏对象还没有完全加载并准备好,所以不能在这里调用 Find 方法。
为了解决这个问题,你可以将 Find 方法的调用移到 Awake 或 Start 方法中。这两个方法都是在游戏对象完全加载并准备好后调用的,所以可以在这里安全地调用 Find 方法。
例如,如果你的 MonoBehaviour 脚本名为 "boom",并且出现了上述异常,你可以像下面这样修改代码:
```
public class boom : MonoBehaviour
{
private GameObject fire;
private void Awake()
{
fire = GameObject.Find("fire");
}
// Start 方法中也可以调用 Find 方法
private void Start()
{
// 在这里可以安全地使用 fire 游戏对象
}
}
```
在 Awake 方法中调用 Find 方法,然后在 Start 方法中使用找到的游戏对象。这样就可以避免在 MonoBehaviour 构造函数中或实例字段初始化程序中调用 Find 方法而导致的异常。
相关问题
UnityException: Find is not allowed to be called from a MonoBehaviour constructor (or instance field initializer), call it in Awake or Start instead. Called from MonoBehaviour 'boom'. See "Script Serialization" page in the Unity Manual for further details
这个异常通常是由于在MonoBehaviour的构造函数或实例字段初始化器中调用Find方法导致的。在MonoBehaviour的构造函数或实例字段初始化器中,Unity引擎的场景层次结构尚未初始化完毕,因此不能使用Find方法。
要解决这个问题,可以将Find方法的调用移动到MonoBehaviour的Awake或Start方法中。这些方法是在场景层次结构完全初始化之后调用的,因此可以安全地调用Find方法。
例如,你可以这样修改代码:
```csharp
public class boom : MonoBehaviour
{
private GameObject player;
private void Awake()
{
player = GameObject.Find("Player");
}
//...
}
```
这样就可以避免在构造函数或实例字段初始化器中调用Find方法导致的异常。
阅读全文