Я не могу идентифицировать конкретный паттерн с поведением, которое я наблюдаю, но по сути моя CircleCast()
будет чаще всего игнорировать объекты, которые, по моему мнению, должны обнаруживаться.
Макет сцены по сути: «курсор» (красный круг), который следует за мышью по оси x, y и препятствию (белый круг, копия красного круга, поэтому они должны вести себя идентично радиопередаче). Есть также ортографическая камера c, обращенная к двум объектам - луч должен быть направлен от точки z камеры вперед к курсору.
К курсору и препятствию прикреплены двухмерные компоненты Circle Collider, и оба находятся на слое «SealantGuideLayer».
Вот мой скрипт Raycaster, который направляет луч на мышь x, y pos, когда мышь находится нажата (и также устанавливает положение курсора при перемещении мыши):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Raycaster : MonoBehaviour
{
public GameObject cursor;
public Camera cam;
void Update()
{
/// Cast ray
if (Input.GetMouseButtonDown(0))
{
Vector3 cursorPos = cursor.transform.position;
Vector3 rayOrigin = new Vector3(
cursorPos.x,
cursorPos.y,
cam.transform.position.z
);
float cursorRad = cursor.GetComponent<SpriteRenderer>().size.x / 2;
int sealantGuideLayer = 1 << 9;
Vector3 rayDirection = cursorPos - rayOrigin;
RaycastHit2D hit_circle = Physics2D.CircleCast(rayOrigin, cursorRad, rayDirection, 10f, sealantGuideLayer);
Debug.DrawRay(rayOrigin, rayDirection * 10, Color.yellow);
if (hit_circle.collider != null)
{
Debug.Log("-----------------Hit: " + hit_circle.transform.name);
}
else
{
Debug.Log("No hit");
}
}
/// Set cursor pos
Vector3 p = cam.ScreenToWorldPoint(Input.mousePosition);
cursor.transform.position = new Vector3(p.x, p.y, 0f);
}
}
Публичные c Переменные Raycaster назначаются в инспекторе следующим образом:
Вот видео, показывающее проблему в действии: https://youtu.be/Nl7iXlI-mW0 - обратите внимание в консоли, что попадание всегда "CursorRed", даже если объект "Препятствие" явно находится в спереди и находится на слое SealantGuideLayer.
Edit
Я получаю ту же проблему при использовании 3d BoxColliders и выполняю Physics.SphereCast.
проблемы нет при использовании рег lar Physics.Raycast ...