2013-01-05 175 views
3

我正处在一个游戏中,角色穿过不同的走廊和走廊来获得他们的目标。当玩家穿过走廊时,我希望墙壁在玩家“传球”时消失。所以我提供什么,我希望发生的图片这听起来令人困惑:检查对象是否完全通过另一个对象Unity3d

Diagram

我已经有了,使无形的墙的功能,但我不知道我应该怎么称呼它。我试图调用它时

player.position.z > wall.position.z 

但是,这导致每面墙当玩家中途过去吧(在它的变换),成为无形的;我想在玩家完全通过它时调用它。有什么方法可以检查玩家是否完全超越了z轴上的墙壁网格?

回答

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只能沿着一个轴的一个方向工作。如果你的关卡是一维的,只能前进,那么这很好!

编辑:我要提的是,如果你的墙壁是静态的(不可变的,标记为在检查“静态”),那么你就可以更方便地使用occlusion culling (unity docs)如果你有Unity Pro中。

1

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

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

只是出于好奇,当玩家转过一个角落并沿着'x'轴而不是'z'走时,这将如何工作? – Jerdak

相关问题