Menu
CoddyTech

Physics.Raycast

Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 63개 중 33번째.

레이캐스트는 한 점에서 특정 방향으로 보이지 않는 선을 쏘아 콜라이더에 부딪혔는지 보고합니다. Physics.Raycast(origin, direction, maxDistance)는 선 위의 maxDistance 단위 이내에 콜라이더가 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 이 자동차는 앞부분에서 2단위보다 가까운 곳에 무언가 있으면 브레이크를 밟습니다:

public float brakeDistance = 2f;

void Update()
{
    if (Physics.Raycast(transform.position, transform.forward, brakeDistance))
    {
        Debug.Log("Brake!");
    }
}

transform.forward는 자동차와 함께 회전하므로 레이는 항상 자동차 앞부분을 향합니다. Vector3.forward는 항상 월드의 z축 방향을 가리킵니다. 레이는 자동차의 중심, 즉 자동차 자체 콜라이더 안에서 시작하며, 레이는 자신이 시작된 내부의 콜라이더를 보고하지 않으므로 자동차는 자기 자신을 감지하지 않습니다. maxDistance를 생략하면 레이는 끝없이 뻗습니다. 그러면 자동차는 맵 건너편에 있는 벽에도 브레이크를 밟게 됩니다.

레이는 그려진 것이 아니라 콜라이더를 감지합니다. Renderer는 있지만 콜라이더가 없는 오브젝트는 레이에 보이지 않으며, 트리거 콜라이더도 충돌로 처리됩니다. 테스트하는 동안 Debug.DrawRay(transform.position, transform.forward * brakeDistance, Color.red)를 사용하면 Unity의 Scene 뷰에 레이가 그려집니다.

challenge icon

챌린지

중급

상점 문을 자동으로 여닫으세요. DoorSensor 스크립트는 출입구 위 지면에서 3.5단위 높이에 있는 Sensor에 부착되어 있습니다. Inspector에서 door와 reach 값 3을 지정합니다.

  • 매 프레임마다 Sensor에서 아래쪽으로 똑바로 reach 단위 길이의 광선을 쏘세요.
  • 광선이 무언가에 맞으면 문이 열린 상태입니다. SetActive(false)로 문을 숨기세요. 아무것에도 맞지 않으면 문을 다시 보이게 하세요.

지면은 광선의 사정거리 밖에 있으므로, 누군가 Sensor 아래에 설 때까지 문은 닫힌 상태로 유지됩니다. Play를 누르고 화살표 키로 Visitor를 그 아래로 이동한 다음 Check를 누르세요.

직접 해보기

using UnityEngine;

public class DoorSensor : MonoBehaviour
{
    public GameObject door;
    public float reach = 3f;

    void Update()
    {
        // Sensor에서 아래로 쏜 광선이 무언가에 닿아 있는 동안 문을 엽니다.
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

물리와 게임플레이의 모든 레슨