产卵目标位于随机位置但未被物体阻挡

时间:2017-09-24 18:01:53

标签: c# unity3d

我在我的FPS中使用此脚本在随机位置(每5秒)生成敌人,但始终在摄像机视图中:

Vector3 screenPosition = Camera.main.ScreenToWorldPoint(new Vector3(Random.Range(0,Screen.width), Random.Range(0,Screen.height), Camera.main.farClipPlane/2));

当然,我的角色所在的地板会阻挡视线。使用上面的代码,敌人可以在地板下面产生,因为技术上它在摄像机视图中,但地板会阻挡它。

此外,我的游戏环境中还有房屋。使用上面的代码,敌人可以在房子后面产生,因此角色无法看到它们。

我正在寻找解决这两个问题的方法。如果我可以将它添加到我的脚本中,它们都可以被解决:"敌人必须始终在摄像机视图中生成并且不能被其他对象阻挡"。

知道如何更改脚本以解决此问题吗?

我正在考虑一种检测对象是否被阻挡的方法,如果是,则将其重新生成。但我担心这会影响产卵的时间(这应该总是5秒,即使因为敌人被阻挡也必须重新计算几次)。

1 个答案:

答案 0 :(得分:0)

Raycast!当你有一个产卵点训练时,一旦你从玩家到产卵位置的光线投射,就会使用Vector3.Distance从玩家到产卵的距离。如果raycast碰撞选择一个新的生成点,因为必须有一些东西(因此在视图之外)。

你可以预先计算几帧,这样你总是每5秒产生一个新的敌人。您甚至可以通过将代码推送到coroutine来多线程化。