【发布时间】:2018-11-08 01:12:47
【问题描述】:
标题说明了一切。
最初我使用的是:
hit.transform.gameObject.layer == LayerMask.NameToLayer("Floor")
但最终我发现我需要为不同的楼层使用不同的图层,我认为我应该使用 LayerMask,如果我错了但无法让它工作,请纠正我。
在我的文档顶部:
public LayerMask floorLayers;
在无效的更新中我有:
int floorMask = ~floorLayers.value;
在 if 语句中我有:
if (playerHasWetFeet == true && wetSteps < maxWetSteps && controller.isGrounded && hit.transform.gameObject.layer == floorMask)
但这不起作用。
谁能指出我做错了什么?
编辑:
这是在我的更新功能中:
int floorMask = ~floorLayers.value;
currentFrameFootstepLeft = anim.GetFloat("FootstepLeft");
if (currentFrameFootstepLeft > 0 && lastFrameFootstepLeft < 0)
{
if (Physics.Raycast(transform.position, dirDown, out hit, 10f, floorMask))
{
if (playerHasWetFeet == true && wetSteps < maxWetSteps && controller.isGrounded && (1 << hit.transform.gameObject.layer & floorMask) != 0)
{
LeftWetStepSpawner();
Debug.Log("Hit");
}
【问题讨论】:
-
floorLayers是否设置为选择每个地板层,这使得floorMask选择所有不是地板的东西?在这种情况下,如果您完全删除if语句的最后一部分会发生什么? -
经过一些测试,我让它工作了,但它是倒置的。我已经选择了我希望光线投射命中的 2 层,但事实证明我必须选择除了我想要的 2 层之外的所有内容。有没有办法反转这个?
-
反转
Raycast调用中的最后一个参数,如果~已经存在,则删除它。 -
就是这样,非常感谢!