我想检查玩家对象的某个半径内是否有可交互的。为此,我使用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字符串
你试过LayerMask吗。GetMask?
LayerMask.GetMask("Interactable")
LayerMask有点棘手。LayerMask返回的东西。NameToLayer
返回索引,而不是层掩码。
您可以看到,层掩码实际上是位掩码,因此索引不是给定位掩码的结果。更多信息在这里
您可以使用层掩码。GetMask
方法,通过代码创建一个掩码,甚至添加一个LayerMask
序列化成员变量,以便能够在编辑器中创建掩码
希望有帮助;)