3d射线测试结果只有黑色可以检测到特性

3d射线测试结果只有黑色可以检测到特性

unity圆形射线检测_u3d射线检测_射线检测圆形缺陷

分别添加以上块

GreenBoxCollider2DRigidbody2D

黑盒碰撞刚体

黄色Rigidbody2D

蓝色 无

红盒碰撞器2D

然后我们使用下面的代码设置一个2d射线进行测试

private LineRenderer line;
Vector3 mousePos = Input.mousePosition;
Vector3 screenToWorld = Camera.main.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, -Camera.main.transform.position.z));
Ray2D ray = new Ray2D(screenToWorld, Vector2.up);
Debug.DrawRay(ray.origin, ray.direction, Color.blue, 1.0f);
RaycastHit2D info = Physics2D.Raycast(ray.origin, ray.direction, 0.1f);
if (info.collider != null)//如果发生了碰撞
    {
     GameObject obj = info.collider.gameObject;
     Debug.Log(obj.name);
    }

结果是只有绿色和红色可以收到碰撞

然后我们重写 3D 射线以进行新的测试

Vector3 mousePos = Input.mousePosition;
Vector3 screenToWorld = Camera.main.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, -Camera.main.transform.position.z - 0.5f));
RaycastHit hit;
Ray ray = new Ray(screenToWorld, Vector3.forward);
Debug.DrawRay(ray.origin, ray.direction, Color.blue, 1.0f);
if (Physics.Raycast(ray, out hit))
{
      Debug.Log(hit.collider.gameObject.name);
}

结果只能检测到黑色

特点1:2D射线只能检测2D碰撞体unity圆形射线检测,同样3D射线只能检测3D碰撞体,射线只能对具有相应碰撞体的物体产生反馈。

复制一个3D黑色方块并将z轴缩小1个单位,然后将原始3D黑色方块放大2.5倍,使小方块在后面

将绿色 2d 块放大 2 倍并将其放置在红色 2d 块的顶部

重复上面的射线操作

u3d射线检测_unity圆形射线检测_射线检测圆形缺陷

无法检测到小黑色方块,无法检测到红色方块

然后我们分别向大、小黑色方块以及绿色和红色方块添加掩模8和9。

// 2d部分
RaycastHit2D info = Physics2D.Raycast(ray.origin, ray.direction, 0.1f, 1<<);
// 3d部分
if (Physics.Raycast(ray, out hit, 10f, 1<<9))

再次重复上述动作,可以检测到黑色小方块unity圆形射线检测,也可以检测到红色方块。

如果不设定长度,那么射线就是一条可以无限延伸和任意穿透的直线。 如果未设置指定层,则仅优先考虑最近的碰撞器。 设置掩码后,指定的掩码优先。 反馈层

有时 2D 游戏可能需要检测鼠标、某些道具或角色。 这时候如果用3D射线指向外面进行2D检测,就无法检测到。

所以,唯一的办法就是随时给鼠标一个很短的检测射线游戏运营,比如0.05f,然后改为向上指向,然后用遮罩来确定需要检测的范围贴图笔刷,是否是UI、对象或其他对象。

文章来源:https://www.niu5.com/skill/220/