为什么我的 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)
.
尺寸相同,一切正常。
这是我第一次使用光线投射,但出于某种原因它总是 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)
.
尺寸相同,一切正常。