OverlapSphere와 SphereCast
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 71개 중 40번째.
레이는 선에 대해 묻습니다. Physics.OverlapSphere(center, radius)는 공 모양의 영역에 대해 묻습니다. 방향이나 거리는 없으며, center 위치의 구에 닿는 모든 콜라이더의 배열을 반환합니다. 이 폭탄은 폭발할 때 3유닛 이내의 모든 상자를 파괴합니다.
void Explode()
{
Collider[] hits = Physics.OverlapSphere(transform.position, 3f);
foreach (Collider c in hits)
{
if (c.CompareTag("Crate"))
{
Destroy(c.gameObject);
}
}
Destroy(gameObject);
}배열에는 범위 안의 모든 것이 들어 있습니다. 바닥, 벽, 폭탄 자체의 콜라이더도 포함됩니다. 겹침 검사는 시작 지점이 이미 내부에 있는 콜라이더를 건너뛰지 않기 때문입니다. 그래서 루프는 동작을 수행하기 전에 태그를 확인합니다. 각 콜라이더의 attachedRigidbody는 해당 콜라이더가 속한 Rigidbody이며, 바닥처럼 정적인 물체의 경우 null입니다.
Physics.SphereCast(origin, radius, direction, out hit, maxDistance)는 두꺼운 레이입니다. 구를 선을 따라 쓸어 보내며, 구가 부딪힐 첫 번째 콜라이더를 알려 줍니다. 반지름이 1인 바위가 두 기둥 사이의 폭 1.5인 틈으로 굴러갈 때 통과할 수 있는지 확인하는 경우를 생각해 보세요. 틈의 한가운데로 얇은 레이를 쏘면 아무것도 맞지 않지만, 구 캐스트는 기둥에 부딪힙니다. 레이와 마찬가지로 구 캐스트도 시작 지점에서 이미 닿아 있는 콜라이더는 건너뜁니다.
챌린지
중급대포에 Physics.SphereCast를 사용해 넓은 빔을 만들어 보세요.
- 스페이스 키를 누르면 구체를 쓸어 보내세요:
Physics.SphereCast(transform.position, radius, transform.forward, out RaycastHit hit, range). - 명중하면
"Hit " + hit.collider.name을 기록하세요(첫 번째 발사는Hit Pole을 기록합니다). 그리고 해당 오브젝트를 제거하세요. - 빗나가면
Miss를 기록하세요.
‘플레이’를 눌러 세 번 발사하세요. Pole이 사라지고, 다음으로 Crate가 사라진 뒤, 마지막에는 빗나갑니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using UnityEngine;
public class Beam : MonoBehaviour
{
public float radius = 0.5f;
public float range = 12f;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// 반지름이 radius인 구를 전방으로 쓸어 이동시키고, 처음 부딪힌 대상을 파괴합니다.
}
}
}
물리와 게임플레이의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드