3

我正在进行一场游戏,其中角色穿越不同的走廊和走廊以达到他们的目标。当玩家穿过走廊时,我希望墙壁在玩家“通过”时消失。这可能听起来令人困惑,所以我提供了一张我想要发生的事情的图片:

图表

我已经有了使墙壁不可见的功能,但我不知道该怎么称呼它。我试过打电话给它

player.position.z > wall.position.z

但这会导致每面墙在玩家经过一半时变得不可见(在它的变换处);我想在玩家完全过去时调用它。有什么方法可以检查玩家是否完全通过了 z 轴上的墙网格?

4

2 回答 2

2

玩家能否沿着走廊返回?如果是这样,这是检查摄像头是否背对有问题的墙壁的一种简单方法。

// Please cache the variables; I'm using properties for simplicity's sake.

float maxViewAngle = Camera.main.fieldOfView / 2f + 20;  // +20 for some padding

Vector3 difference = Camera.main.transform.position - wall.transform.position;

float angleDifference = Vector3.Angle( Camera.main.transform.forward, difference );

if ( angleDifference > maxViewAngle )
{
  wall.HideThyself();  // Or whatever
}

您发布的解决方案 ,player.position.z > wall.renderer.bounds.max.z将仅在一个轴的一个方向上起作用。如果您的关卡是一维的并且只向前移动,那么这很好!

编辑:我应该提到,如果你的墙是静态的(不可变的并且在检查器中标记为“静态”),那么如果你有 Unity Pro,你可以更容易地使用遮挡剔除(统一文档) 。

于 2013-01-08T00:36:34.610 回答
1

解决了!发现渲染器有一个“max”属性。我刚用过:

player.position.z > wall.renderer.bounds.max.z
于 2013-01-05T21:55:05.747 回答