Menu
CoddyTech

Physics.Raycast

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

레이캐스트는 한 지점에서 특정 방향으로 보이지 않는 선을 쏘고, 콜라이더에 부딪혔는지 알려줍니다. 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

챌린지

중급

누군가 센서 아래에 서 있으면 가게 문이 열리도록 하세요.

  1. Update()에서 Physics.Raycast(transform.position, Vector3.down, reach)를 테스트하세요. 아래쪽을 향해 곧게 뻗고 길이가 reach 단위이며 지면 위에서 멈추는 광선입니다.
  2. 조건이 참이면 door.SetActive(false);를 호출하고, else에서는 door.SetActive(true);를 호출하세요.

‘플레이’를 누르고 방문자를 센서 아래로 걸어가게 하세요. 문이 열리고 방문자 뒤에서 닫힙니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;

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

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

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

직접 연습해 보세요: Unity 플레이그라운드