为什么我的 RaycastHit2D 总是返回 true?

Why is my RaycastHit2D is always returning true?

这是我第一次使用光线投射,但出于某种原因它总是 returns 正确吗?正如您在下面的脚本中看到的那样,我做了一个 debug.log,如果它是真的,它总是打印出我告诉它写的消息。我确实在检查器中将播放器层(图层蒙版)设置为播放器。仍然返回 true。

我也把它设置为一切,它仍然返回 true。我什至将图层蒙版设置为空,它仍然返回 true。我可能犯了有史以来最愚蠢的错误,但我是光线投射的新手。

这是脚本

using System.Collections.Generic;
using UnityEngine;

public class LadderRayCast : MonoBehaviour
{
    public float size;
    public Player pscript;
    public RaycastHit2D onplayer;
    public LayerMask playerlayer;
    public Color coloor;
    public BoxCollider2D coll;
    
    // Start is called before the first frame update
    void Start()
    {
        pscript = FindObjectOfType<Player>();
        coll = GetComponentInChildren<BoxCollider2D>();
        coll.enabled = !coll.enabled;
        
    }

    // Update is called once per frame
    void Update()
    {
        
     
        Debug.DrawRay(transform.position, Vector2.up * size, Color.red);
        onplayer = Physics2D.Raycast(transform.position, Vector2.up * size, playerlayer);
        
        if (onplayer)
        {
            Debug.Log("Touching Player");
        } else if (!onplayer)
        {
            Debug.Log("not");
            
        }
    }
   
}

我明白了!它总是返回真,因为它正在接触梯子对撞机。我通过禁用它可能与之碰撞的所有游戏对象并且 Debug.Log 停止工作来发现这一点。但是我很困惑,因为我告诉它只与我的播放器图层蒙版发生碰撞。问题是我的图层蒙版参数错误。

我把它改成了这个Debug.DrawRay(transform.position, Vector2.up * size, Color.red)

而不是将 Vector2.up 乘以大小。我把它改成这样: onplayer = Physics2D.Raycast(transform.position, Vector2.up, size, playerlayer).

尺寸相同,一切正常。