提问者:小点点

Unity2D重叠圈图层掩模不工作


我想检查玩家对象的某个半径内是否有可交互的。为此,我使用Physics2D。重叠圆圈以检查播放器附近的碰撞器。我不太清楚为什么参数LayerMask。NameToLayer(“可交互”)不检测任何东西,尽管该层上存在对象。如果第三个参数被删除,它会检测到最近的玩家

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CheckInteractable : MonoBehaviour
{
    void Update()
    {
        Collider2D checkRadius = Physics2D.OverlapCircle(transform.position, 5, LayerMask.NameToLayer("Interactable"));       

        if (checkRadius != null)
        {
            print(checkRadius.ToString());        

        }
    }
}

即使可交互层中存在对象,也不会打印To字符串


共2个答案

匿名用户

你试过LayerMask吗。GetMask?

LayerMask.GetMask("Interactable")

匿名用户

LayerMask有点棘手。LayerMask返回的东西。NameToLayer返回索引,而不是层掩码。

您可以看到,层掩码实际上是位掩码,因此索引不是给定位掩码的结果。更多信息在这里

您可以使用层掩码。GetMask方法,通过代码创建一个掩码,甚至添加一个LayerMask序列化成员变量,以便能够在编辑器中创建掩码

希望有帮助;)