这个问题比看起来要复杂得多,这就是原因。
我有一个播放器,并且在2D + 3D世界中启用了物理。
这些怪物具有正弦运动=他们从右到左上下移动。 播放器只能或多或少地跳得很高,但是不能左右移动(就像没有互联网连接时Chrome上的恐龙游戏)。
在多次尝试检测玩家是否在上方之后(不是简单地if (PlayerY - MonsterY) > 0
,否则我不会在这里问到),我想出的最好的主意是在怪物中制造两个对撞机:一个用于“ head
”和“ body
”之一。
所以我想在FixedUpdate
计算之后检查这个。
如果您读过execution order of the callback functions,就没有LateFixedUpdate
:即使有LateUpdate
,也已正式写明开发人员应该在FixedUpdate
中处理物理,并且没有其他地方。
到目前为止,我所做的是:调用怪物头的OnCollision
时,只需更改一个布尔值,对怪物体OnCollision
进行更改即可。因此,在OnCollisionXXX(如文档所述)之后,您只能使用一件事:yield WaitForFixedUpdate
。
我想检查这些布尔值,并根据它们在yield WaitForFixedUpdate
中的值进行操作。
关于如何执行此操作,我在网上找不到任何有价值的示例。知道在这种情况下如何实现yield WaitForFixedUpdate
吗?我被卡住了。
答案 0 :(得分:1)
问题
如何实现收益WaitForFixedUpdate
在Coroutine内部使用yield
yield
类似于“在此处中断例程,渲染当前帧,然后在下一帧从此处继续。”
例如
private void Start()
{
// Start the routine once
StartCoroutine(LateFixedUpdate());
}
private IEnumerator LateFixedUpdate()
{
// looks scary but is okey in a Coroutine
// as long as you yield somewhere inside of the loop
while(true)
{
// Continue after all FixedUpdate has been called on all scripts
yield return new WaitForFixedUpdate();
// do something
}
}