OverlapSphere와 SphereCast
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 63개 중 38번째.
광선은 선에 대해 질문합니다. Physics.OverlapSphere(center, radius)는 공 모양 영역에 대해 질문합니다. 방향이나 거리는 없이 center에 있는 구에 닿는 모든 콜라이더의 배열을 반환합니다. 이 폭탄은 폭발할 때 3 units 이내의 모든 상자를 파괴합니다:
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의 틈을 두고 있는 두 기둥 쪽으로 굴러갈 때, 이 바위가 틈을 통과할 수 있는지 확인하는 데 사용합니다. 틈 한가운데를 지나는 가느다란 광선은 아무것도 맞히지 않지만, 구 캐스트는 기둥에 부딪힙니다. 광선과 마찬가지로 구 캐스트도 시작 지점에서 이미 닿아 있는 콜라이더는 건너뜁니다.
챌린지
중급대포에 넓은 빔을 장착하세요. Beam 스크립트는 Cannon에 있으며, Inspector에서 radius를 0.5로, range를 12로 설정합니다. 왼쪽 및 오른쪽 화살표 키로 대포를 회전합니다.
- Space 키를 누르면 대포에서 앞으로
range단위만큼 뻗는radius의 구를 쓸어 보냅니다. - 무언가에 맞으면 맞은 대상의 이름과 함께
Hit Pole을 기록하고 해당 오브젝트를 파괴합니다. - 아무것도 맞지 않으면
Miss를 기록합니다.
가느다란 Pole은 대포의 중심선에서 약간 옆에 서 있습니다. Play를 누르고 발사한 다음, Check를 누르세요.
직접 해보기
using UnityEngine;
public class Beam : MonoBehaviour
{
public float radius = 0.5f;
public float range = 12f;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// 반지름이 radius인 구를 앞으로 스윕하여 처음 충돌하는 대상을 파괴합니다.
}
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.