组件、行为和 MonoBehaviour 之间有什么区别?为什么这些是分开的?

2024-03-24

MonoBehaviour延伸Behaviour and Behaviour延伸Component。 我想知道为什么这些类被分开以及这些类的语义含义。 区分这些类有什么目的吗?是否有任何课程延伸Behaviour or Component直接地?

我知道我们必须使用MonoBehaviour在 Unity 中创建 C# 代码。 不过,我对 Unity 作为游戏引擎的架构很感兴趣。


成分:

Component是两者的基类Behaviour and MonoBehaviour。它是可以附加到游戏对象的任何脚本的基类。

这几乎是每个Unitybuild-in脚本源自.这包括Collider and Rigidbody.


行为:

最重要的是要了解Behaviour是从它继承的任何东西都可以启用或禁用。如果您不希望启用/禁用它,请不要从中继承您的脚本。

例如,Rigidbody无法启用/禁用。这就是为什么它继承自Component类而不是Behaviour.

Behaviour继承自Component.


单一行为:

最需要注意的一点是MonoBehaviour是当你必须使用协程、调用或任何 Unity 回调函数(例如物理)时你需要它OnCollisionEnter功能,Start, OnEnable, OnDisable, etc.

MonoBehaviour继承自Behaviour以便您的脚本可以启用/禁用。

区分这些类有什么目的吗?

是的,就像上面的答案一样,它们是分开的,以便您可以通过继承适当的组件来使用不同的功能。

你想要协程,Invoke, InvokeRepeating并能够启用/禁用您的脚本?使用继承自MonoBehaviour.

您希望能够启用或禁用脚本,但不需要协程,Invoke, InvokeRepeating? Use Behaviour.

当您有一个永远不应该启用/禁用的脚本时,它应该继承自Component.

注意Behaviour and Component由 Unity 用于内部内容。您不应该尝试从这些继承您的脚本。

将它们分开的主要原因是为了节省内存,并且使每个组件中的代码易于维护。这比为很少使用的功能编写数千行代码要好。通过将它们分开,当它们被加载到内存中时,它们实际上正在被使用,而不是浪费内存中的空间。

是否有直接扩展Behavior或Component的类?

Yes.

  • MonoBehaviour直接继承自Behaviour那么 继承自Component.

  • Collider继承自Component直接地。然后是非基础碰撞器 例如BoxCollider and SphereCollider继承自那Collider.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

组件、行为和 MonoBehaviour 之间有什么区别?为什么这些是分开的? 的相关文章

随机推荐

  • 调用渲染与绘制 DOM?

    我正在学习 React 并试图更好地理解生命周期和不同阶段 我刚刚读到的一件事是 React 首先渲染然后安装元素 在这种情况下渲染意味着调用类的 render 而不是绘制 DOM 我想我只是不太明白这意味着什么 有人可以用简单的方式或举例
  • Ansichar 和 char 有什么区别? [复制]

    这个问题在这里已经有答案了 我最近遇到了这种数据类型不匹配的情况 这是我以前从未见过的 我希望有人能解释它们是什么以及它们有何不同 我得到的错误是 F2063 DCC 错误 E2010 不兼容的类型 AnsiChar 和 Char 历史上在
  • 增加 ulimit Mac OS X 10.8

    I m learning MongoDB and when I start the mongo shell a wild warning message appeared It says 我如何更改 软限制 我使用的是 Mac OSX 10
  • 如何删除 Hudson 的构建工件?

    我们使用 Hudson 作为我们的持续集成服务器 它非常棒 我们有两个问题 它们有轻微的相关性 https hudson dev java net issues show bug cgi id 2736 https hudson dev j
  • 将数据集加载到数据库时,DBUnit 出现 NoPrimaryKeyException

    当我尝试运行使用 DBUnit 的单元测试之一时 我收到 NoPrimaryKeyException 数据表是使用 Hibernate 创建的 是映射多对多关系的两个类之间的连接表 定义关系的注解如下 Override ManyToMany
  • Pagedown markdown 脚本插入图像 url 一次

    我有一个修改后的 pagedown markdown 标记脚本 用于将图像 url 插入编辑器 但它仅在第一次起作用 我已经用注释解释了我的代码
  • 使用 python scapy 发送 DHCP Discover

    我是Python新手 正在学习一些网络编程 我希望通过我的tap接口向我的DHCP服务器发送一个DHCP数据包 并期待它的一些响应 我尝试了几种数据包构建技术 例如 structs 和 ctypes 最终使用 scapy 在这里 我能够发送
  • 附加属性有哪些不同的用途?

    到目前为止 我在 WPF 的冒险经历中已经看到了 AttachedProperties 的一些非常不同的用途 我想知道其中有哪些不同的用途 我见过相当普通的用途 例如 Grid 和 Canvas 中的用途 以及一些非常酷的技巧 允许在没有
  • 在 Jupyter Notebook 中重新加载 Python 模块(不自动重新加载)

    我有以下文件夹结构 project src init py mymodule py mynotebook ipynb within mynotebook我可以导入mymodule使用标准公式from src mymodule import
  • 如何使用空格或缩进注释多行

    在 Visual Studio 2010 中 我有多行文本需要注释 A B C Using CTRL E C to comment out multiple lines I get A B C 我想在之间有一个空格 或缩进 and A he
  • GNUPLOT:点图,数据取决于点大小

    我正在尝试绘制由 3 个坐标组成的数据集 X 坐标 x 坐标和出现次数 例子 1 2 10 3 1 2 3 2 1 我想在 x y 处为每条线画一个点 其直径取决于第三个值 Gnuplot 可以做到这一点吗 创建具有可变点大小的二维图 看t
  • CSS非标准“ZOOM”属性

    我有一个 css 文件 其中包含一个带有 Zoom 1 的类 我在浏览器控制台上收到以下错误 该页面使用非标准的 缩放 属性 相反 您可以使用 calc 或将 transform 与 transform origin 0 0 一起使用 如何
  • $redis 全局变量与 ruby​​ on Rails

    我使用 redis 作为读取缓存 我创建了一个初始化程序 配置 初始化程序 redis rb redis Redis new host gt ENV REDIS HOST port gt ENV REDIS PORT 每当创建新工作人员时
  • 未在命名空间中捕获 PDOException

    我不知道怎样才能抓住PDOException在下面的代码中 请告诉我下面的代码中哪里抛出异常 我有 目录 folder 1 b php 2 c php autoloader in the b php and in c php class c
  • 测试“0”、“-0”、“0.0”、“00”时的 PHP 和 Perl 行为

    当 PHP Perl 测试一个值时 我遇到了这个有趣的行为 print 0 Yes No gt No print 00 Yes No gt Yes print 0 0 Yes No gt Yes print 0 Yes No gt Yes
  • 为什么C#中没有反向枚举器?

    有谁知道是否有特定原因或设计决定不在 C 中包含反向枚举器 如果有一个与 C 相当的东西就好了reverse iterator就像 Enumerator 相当于 C 一样iterator 可以反向迭代的集合只需实现 IReverseEnum
  • 关于如何识别右值或左值引用以及 if-it-has-a-name 规则

    我正在读托马斯 贝克尔的书article http thbecker net articles rvalue references section 05 html关于右值引用及其使用 在那里他定义了他所说的如果它有一个名字 rule 声明为
  • 当 ISO 年份与公历年份不同时,Python Dataframe isocalendar() 布尔条件不会产生所需的结果

    令我惊讶的是 当我只想要当年第一周的数据时 我的简单布尔条件却产生了完整的一年结果 My code Some sample data df1 pd DataFrame 1596 1537 1482 1960 1879 1824 index
  • c中int (*pt)[5]的含义是什么[重复]

    这个问题在这里已经有答案了 我读过一些关于这种类型声明的地方 声明是 int arr 5 我对这个类型声明有点困惑 实际上这个声明的含义是什么以及我们什么时候使用它 int arr 5 arr是 5 个指针的数组 int arr 5 arr
  • 组件、行为和 MonoBehaviour 之间有什么区别?为什么这些是分开的?

    MonoBehaviour延伸Behaviour and Behaviour延伸Component 我想知道为什么这些类被分开以及这些类的语义含义 区分这些类有什么目的吗 是否有任何课程延伸Behaviour or Component直接地