Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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
Unity3d 如何正确地检测玩家何时可以从上方击溃敌人?_Unity3d - Fatal编程技术网

Unity3d 如何正确地检测玩家何时可以从上方击溃敌人?

Unity3d 如何正确地检测玩家何时可以从上方击溃敌人?,unity3d,Unity3d,这个问题比看起来要复杂得多,原因如下 我有一个播放器,并且在2D+3D世界中启用了physic 怪物有一个正弦运动=他们从右到左上下移动。 玩家只能跳得差不多高,但不能左右移动(就像Chrome上没有互联网连接的恐龙游戏) 在多次尝试检测玩家是否在上面失败后(这不仅仅是if(PlayerY-MonsterY)>0,否则我不会在这里问),我想到的最好办法是在怪物中制作两个对撞机:一个用于“头部”,另一个用于“身体” 当玩家只击中头部时,它只能在上面(否则首先是身体),所以情况很简单 当玩家只击中

这个问题比看起来要复杂得多,原因如下

我有一个播放器,并且在2D+3D世界中启用了physic

怪物有一个正弦运动=他们从右到左上下移动。 玩家只能跳得差不多高,但不能左右移动(就像Chrome上没有互联网连接的恐龙游戏)

在多次尝试检测玩家是否在上面失败后(这不仅仅是
if(PlayerY-MonsterY)>0
,否则我不会在这里问),我想到的最好办法是在怪物中制作两个对撞机:一个用于“
头部
”,另一个用于“
身体

  • 当玩家只击中头部时,它只能在上面(否则首先是身体),所以情况很简单
  • 当玩家只击中身体时,它只能在身体下方或侧面,所以情况也很简单
  • 有时,玩家恰好击中了两个对撞机
因此,我想在
FixedUpdate
计算之后检查这一点

如果您阅读,则没有
LateFixedUpdate
:尽管有
LateUpdate
,但官方规定开发人员应该在
FixedUpdate
中处理物理问题,而不在其他任何地方

到目前为止,我所做的是:当调用怪物头部的
OnCollision
时,只需更改一个布尔值,怪物身体的
OnCollision
也是如此。因此,在OnCollisionXXX之后,正如文档所说,只有一件事可以使用:
yield WaitForFixedUpdate

我想检查这些布尔值,并根据它们在
yield WaitForFixedUpdate
中的值进行操作

我在网上找不到任何关于如何做到这一点的有价值的例子。在这种情况下,您知道如何实现
yield WaitForFixedUpdate
?我被这个问题困住了。

如何实现yield WaitForFixedUpdate

收益率
用于

yield
类似于“在此处中断例程,渲染当前帧,然后在下一帧中从此处继续。”

e、 g

private void Start()
{
//开始例行公事一次
Start例程(LateFixedUpdate());
}
私有IEnumerator LateFixedUpdate()
{
//看起来很吓人,但在一次合作中很好
//只要你在循环中的某个地方让步
while(true)
{
//在所有脚本上调用所有FixeUpdate后继续
返回新的WaitForFixedUpdate();
//做点什么
}
}

什么是
2D+3D世界