👩🏻💻오늘 할 일
체력바 UI아이템 설명문 표시새로운 노트북 환경설정
😵💫오늘의 트러블 슈팅
#1 작은 오브젝트 인식 문제
화면 중앙에서 ray를 쏴서 물체를 감지하고 그 물체의 데이터를 가져와
설명문을 표시하는 로직을 구현했다.
하지만 아무것도 뜨지 않았다.
▼문제영상
ray를 화면에 표시해서 확인해 보니 시야각이 작은 영향이 있고
(작게 안 하면 플레이어 높이가 낮기 때문에 땅을 뚫는다)
컵케이크도 높이가 낮기 때문에 ray에 감지가 안되고 있었다.
해결방법을 찾아보니
1.ray를 머리 배 다리 세 방향으로 쏘기
2.SphereCast를 이용해 ray의 폭 늘리기
3.OverlapSphere를 사용하기
이 세 가지가 있었다.
첫 번째는 3개의 ray를 쏘고 감지하기 때문에 최적화 면에서는 안 좋을 것 같아서 패스
세 번째는 모든 방향에서 감지를 하기 때문에
(앞에 있는 물체만 감지하고 싶었다)
두 번째 방법을 선택해서 코드를 수정하기로 하였다.
여기서 잠깐
🔍 SphereCast란?
SphereCast는 일반 Raycast의 확장 버전으로, 레이를 발사할 때 한 점에서 발사하는 것이 아니라 구(Sphere) 형태로 발사하여 더 넓은 영역을 감지할 수 있는 기능
아래와 같은 코드로 수정을 하니 문제 없이 감지를 하였다!
//레이를 쏠 위치 설정
Vector3 rayPos = transform.position + Vector3.up * 0.35f;
//레이의 감지 범위 설정
float sphereRadius = 0.3f;
Ray ray = new Ray(rayPos, transform.forward);
//레이 표시
Debug.DrawLine(ray.origin, ray.origin + ray.direction * m_MaxCheckDistance, Color.red);
//레이 충돌
//SphereCast를 이용해 레이 폭을 늘리기
if (Physics.SphereCast(ray, sphereRadius, out RaycastHit hit, m_MaxCheckDistance, m_InteractionLayer))
{
if (hit.collider.gameObject != m_CheckObject)
{
if (hit.collider.TryGetComponent(out IInteractable item))
{
m_CheckObject = hit.collider.gameObject;
m_CheckItem = item;
}
else
{
NotCheckedItem();
}
}
}
else
{
NotCheckedItem();
}
OnCheckItemEvent?.Invoke(m_CheckItem);
▼해결 영상
'과제' 카테고리의 다른 글
[Unity3D,C#] 게임개발 숙련 팀 프로젝트 1일차 (0) | 2025.03.12 |
---|---|
[Unity,C#,3D] 게임 개발 숙련 개인 과제 3일 차 (0) | 2025.03.06 |
[Unity,C#,3D]게임 개발 숙련 개인 과제 1일 차 (0) | 2025.03.04 |
[Unity,C#] 유니티 입문 팀 프로젝트 개발 2일차 (0) | 2025.02.25 |
[Unity,C#] 유니티 입문 팀 프로젝트 개발 1일차 (0) | 2025.02.24 |