C# 在不扩展MonoBehavior的情况下无法使用Unity脚本

C# 在不扩展MonoBehavior的情况下无法使用Unity脚本,c#,unity3d,C#,Unity3d,我创建了一个Unity C#脚本,我想用它来存储它所附加到的对象的数据 该类只有两个字段,没有任何行为。因为它没有任何行为,所以感觉没有必要扩展monobhavior 理想情况下,我不想扩展任何内容,但我也尝试扩展行为(这是monobhavior扩展的),在这两种情况下,我在脚本的侧栏中都会出现以下错误: 无法加载关联的脚本。请修复所有编译错误并分配有效的脚本 我是否可以在不扩展脚本的情况下将脚本附加到对象上?否,如果游戏对象不扩展脚本,则无法将脚本添加到游戏对象上,如果游戏对象不扩展monob

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

该类只有两个字段,没有任何行为。因为它没有任何行为,所以感觉没有必要扩展
monobhavior

理想情况下,我不想扩展任何内容,但我也尝试扩展
行为
(这是
monobhavior
扩展的),在这两种情况下,我在脚本的侧栏中都会出现以下错误:

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


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

否,如果游戏对象不扩展脚本,则无法将脚本添加到游戏对象上,如果游戏对象不扩展
monobhavior

你就不能将脚本添加到游戏对象中,Unity在使用附加到游戏对象的脚本时会做出某些假设,使脚本安全的方法之一是将脚本强制为
monobhavior
的子类


在我看来,将“实体类”附加到游戏对象是很好的。通常情况下,数据及其行为应该结合在一起,但有时您可能会将游戏/应用程序设置为具有访问其他对象属性的中间人对象。例如,一个AI代理检查附近敌人的生命点以选择最弱的生命点。因此,如果您觉得有理由只为向游戏对象添加数据而附加脚本,那么尽管这意味着扩展
monobhavior

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


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

你不能将非monobhavior类附加到游戏对象,但你可以使用非monobhavior类来保存你想要序列化和保存的数据。您只需从MonoBehavior脚本中使用该类,但不能将其附加到GameObjects。您不能将非MonoBehavior类附加到GameObjects,但可以使用非MonoBehavior类来保存要序列化和保存的数据。您只需从MonoBehavior脚本中使用该类,但无法将其附加到GameObjects。这并不完全正确。您可以扩展
行为
组件
。MonoBehavior的两个超类都有不同级别的可用功能。例如,
Transform
是一个组件,而
Canvas
是一种
行为
并不完全正确。您可以扩展
行为
组件
。MonoBehavior的两个超类都有不同级别的可用功能。例如,
Transform
是一个组件,而
Canvas
是一个
行为
注意,单行为的开销主要在于单行为所具有的神奇方法:Unity必须为它们检查类,如果发现,调用它们会有开销。但这只对
Update()
真正重要。如果您没有
Update()
(即使是空的!),那么开销几乎为零。请注意,MonoBehavior的开销主要是MonoBehavior拥有的神奇方法:Unity必须检查类中是否有它们,如果找到它们,调用它们会有开销。但这只对
Update()
真正重要。如果没有
Update()
(即使是空的!),那么开销几乎为零。