【问题标题】:How do I tell if player (white cube) is inside a valid position (transparent cubes) in Unity?如何判断玩家(白色立方体)是否在 Unity 中的有效位置(透明立方体)内?
【发布时间】:2018-12-14 01:13:18
【问题描述】:

玩家是一个白色立方体。我可以移动播放器。玩家可以说一次移动一个立方体单元。我这里有 8 个透明立方体,是玩家可能处于的位置。当然,我稍后会添加更多透明立方体。如果玩家不在透明立方体内,他会摔倒或撞到墙壁或诸如此类的东西。

我需要帮助开始。我正在考虑将所有透明立方体放在一个列表中,然后在更新功能中我可以将玩家的位置与所有透明立方体的位置进行比较。我不想这样硬编码:

if (transform.position.x < 0 || transform.position.x > 4) {
    DoSomething();
}

因为它在其他情况下没有帮助。

【问题讨论】:

  • 我不确定这个问题是否真的属于堆栈溢出的范畴。如果你想做某事并且你知道你想怎么做,那么你应该尝试你的想法(这对我来说听起来很合理),如果不成功就回来。
  • 听起来你需要阅读 Colliders。 docs.unity3d.com/Manual/CollidersOverview.html
  • 谢谢。我对collider略知一二。即使飞机不是简单的设计也应该帮助我。我希望有人能给我代码。
  • 我认为这不是 Stack Overflow 的重点。 Unity 文档中有大量代码示例,例如:docs.unity3d.com/ScriptReference/Collider.OnTriggerEnter.html

标签: c# unity3d


【解决方案1】:

给所有透明框一个BoxCollider并启用IsTrigger

你可以例如使用某个tag 来识别立方体和碰撞器列表。

如果您输入一个触发器,则添加一个,如果您离开触发器,则删除一个。

如果列表为空,则您没有触摸任何触发器并跌倒

// in the inspector here you set the target tag 
// the player should collide with
[SerializeField] private string _collideWithTag;

private List<Collider> _colliders;

private void Update()
{
    if(_colliders.Count > 0) return;

    // not in a valid area -> fall or whatever
}

private void OnTriggerEnter(Collider other)
{
    if(other.gameObject.tag != _collideWithTag) return;

    if(_colliders.Contains(other)) return;

    _colliders.Add(other);
}

private void OnTriggerExit(Collider other)
{
    if(other.gameObject.tag != _collideWithTag) return;

    if(!_colliders.Contains(other)) return;

    _colliders.Remove(other);
}


// the above should be enough but you could go sure and also use
private void OnTriggerStay(Collider other)
{
    if(other.gameObject.tag != _collideWithTag) return;

    if(_colliders.Contains(other)) return;

    _colliders.Add(other);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多