Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么不在unity中完成Update()函数中的所有函数_C#_Unity3d - Fatal编程技术网

C# 为什么不在unity中完成Update()函数中的所有函数

C# 为什么不在unity中完成Update()函数中的所有函数,c#,unity3d,C#,Unity3d,void Update可以每1帧执行一次功能。所以在脚本中,e.x类似于 无效OnTiggerEnter{}。为什么不把它放在更新函数中。我知道这里有一些误解,但我就是不能解释给自己。此外,这是唯一的无效更新,无效开始{}在unity中的功能。包括一些函数,比如void OnTriggerEnter,也可以在unity中运行,因为它是内置函数。我们编写的那些函数,比如public void switch avatar,如果没有在void Update{}中引用它,它可以运行吗。我知道上面的问题可

void Update可以每1帧执行一次功能。所以在脚本中,e.x类似于
无效OnTiggerEnter{}。为什么不把它放在更新函数中。我知道这里有一些误解,但我就是不能解释给自己。此外,这是唯一的无效更新,无效开始{}在unity中的功能。包括一些函数,比如void OnTriggerEnter,也可以在unity中运行,因为它是内置函数。我们编写的那些函数,比如public void switch avatar,如果没有在void Update{}中引用它,它可以运行吗。我知道上面的问题可能听起来很愚蠢,但是不知道为什么我不能说出答案。非常感谢你的帮助。谢谢

好的,让我们打开潘多拉魔盒,了解统一中的魔法方法

首先,有两种类型的类可以从中继承以访问神奇的方法:MonoBehavior和ScriptableObject。两者都提供不同的功能,后者主要用于在场景外序列化数据。此外,与单一行为相比,ScriptableObject的神奇方法要少得多

第二:单一行为有生命周期。您在此生命周期中的位置决定了引擎调用的方法

下图显示了MonoBehavior的整个生命周期: 资料来源:

如您所见,对象被实例化并调用Awake。在第一次调用Update之前,引擎调用Start方法。唤醒和启动之间有一个区别:唤醒类似于构造函数。调用它时,不保证任何外部组件与游戏对象上的其他组件一样存在。当调用Start时,对象上的所有其他组件都将初始化,并且可以通过GetComponent调用进行访问

现在要更新、修复更新和所有其他事件: Unity有两个独立的循环,它迭代。一个是物理,另一个是其他。因为计算物理是昂贵的,需要精确的,所以它被称为固定的,不同的时间步。实际上,您可以在中的项目设置中设置它们。 现在,如果你想修改任何与物理有关的东西,比如刚体的速度,你应该在FixeUpdate中进行修改,因为它与物理引擎PhysX或Box2D在同一时间步中运行,这取决于你对碰撞器的使用情况。 另一方面,尽可能频繁地运行更新。两次更新调用之间的当前时间距离可以通过调用time.deltaTime来观察,这是两次更新调用之间经过的时间。请注意,Time.fixedDeltaTime始终是相同的,因为它是两次物理调用之间的时间。 其他事件方法被称为对编辑器内部更新循环、渲染循环或物理循环的响应。在物理计算中,每当对象发生碰撞时,都会调用OnCollisionCenter。请注意,这不能发生在更新之外,因为我们知道,更新不用于计算物理

好的,一个tl;博士: 启动和更新不是MonoBehavior生命周期中存在的唯一方法,有很多方法,每种方法都有其目的。当调用更新方法时,物理在不同的时间尺度上计算,因此不能作为更新的一部分


还有一件事需要注意:你应该认真阅读你正在使用的游戏引擎手册。在为实时应用程序编写代码时,有很多东西是你应该知道的,如果你是在现有的游戏引擎上构建的,你应该定期检查它的文档。尤其是Unity的文档对于代码和编辑器的使用都是非常好的读物。

这取决于您希望代码在何处执行。。如果你想每隔几天更新一次,那么是的,把它更新一下。。如果您只想在触发冲突的第一帧中使用它,请将其放入OnTriggerEnter。。。有点不清楚这个问题要问什么..有什么区别吗?有没有提供任何结果的示例?这些只是实际引擎寻找的特殊方法。阅读Unity的API文档,他们很好地描述了在哪些情况下调用了哪些所谓的消息。。。正如您的示例所述:在第一次更新之前只调用一次Start。每帧调用一次更新。OnTriggerEnter触发器碰撞的第一帧,然后自定义方法切换虚拟形象。。无论何时你呼唤它;