检查对象是否完全通过另一个对象Unity3d

时间:2013-01-05 21:17:33

标签: unity3d unityscript

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

Diagram

我已经有了让墙看不见的功能,但我不知道应该怎么称呼它。

时我试过调用它
player.position.z > wall.position.z

但这会导致每个墙在玩家离开它的过程中变得不可见(在它变形时);当玩家完全过去时,我想打电话给它。有什么方法可以检查玩家是否完全超过了z轴上墙的网格?

2 个答案:

答案 0 :(得分: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,则可以更轻松地使用occlusion culling (unity docs)

答案 1 :(得分:1)

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

player.position.z > wall.renderer.bounds.max.z