【问题标题】:Check if object completely passes another object Unity3d检查对象是否完全通过另一个对象Unity3d
【发布时间】:2014-07-05 04:51:21
【问题描述】:

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

我已经有了使墙不可见的功能,但我不知道该怎么称呼它。我试过在什么时候调用它

player.position.z > wall.position.z

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

【问题讨论】:

    标签: unity3d unityscript


    【解决方案1】:

    玩家能回到那条走廊吗?如果是这样,这是检查摄像头是否背离相关墙壁的简单方法。

    // 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)

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 只是出于好奇,当您的玩家转过一个角落并且沿着“x”轴而不是“z”轴行走时,这将如何工作?
      猜你喜欢
      • 2015-10-11
      • 2022-12-08
      • 2021-08-17
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 2018-04-11
      • 1970-01-01
      相关资源
      最近更新 更多