【问题标题】:Unable to use Unity script without extending MonoBehaviour不扩展 MonoBehaviour 就无法使用 Unity 脚本
【发布时间】:2018-04-22 06:45:51
【问题描述】:

我创建了一个 Unity C# 脚本,我想用它来存储它所附加的对象的数据。

该类只有两个字段,并且没有任何行为。因为没有任何行为,感觉没必要扩展MonoBehaviour

理想情况下,我什么都不想要扩展,但我也尝试扩展 BehaviourMonoBehaviour 扩展),在这两种情况下,我都会在脚本的侧边栏中收到以下错误:

无法加载关联的脚本。请修复任何编译错误并分配一个有效的脚本。

我是否可以在不扩展 MonoBehaviour 的脚本的情况下将脚本附加到对象?

【问题讨论】:

  • 您不能将非 MonoBehaviour 类附加到游戏对象,但您可以使用非 MonoBehaviour 类来保存要序列化和保存的数据。您只需使用 MonoBehaviour 脚本中的该类,但不能将其附加到 GameObject

标签: c# unity3d


【解决方案1】:

Unity 在使用附加到游戏对象的脚本时会做出某些假设,确保它们安全的方法之一是将脚本强制为 MonoBehaviour 的子类。

在我看来,将“实体类”附加到您的游戏对象是很好的。虽然通常数据及其行为应该结合在一起,但有时您可能会将游戏/应用程序设置为具有访问其他对象属性的中间人对象。例如,一个 AI 代理会检查附近敌人的健康点以选择最弱的一个。因此,如果您认为附加脚本只是为了向游戏对象添加数据是合理的,那就去吧,即使这意味着扩展 MonoBehaviour

【讨论】:

  • 请注意,MonoBehaviour 的开销主要体现在 MonoBehaviour 拥有的魔术方法中:Unity 必须检查它们的类,如果找到,调用它们会产生开销。但这只对Update() 很重要。如果您没有Update()(即使是空的!),那么开销几乎为零。
【解决方案2】:

不,如果 GameObjects 不扩展 MonoBehaviour,则您不能将脚本添加到它们中

【讨论】:

  • 完全正确。您可以改为扩展 BehaviourComponent。 MonoBehaviour 的两个超类都有不同级别的可用功能。例如。 Transform 是一个组件,而 Canvas 是一个 Behaviour
猜你喜欢
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多