Menu
CoddyTech

RaycastHit

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

Physics.Raycast는 무엇에 맞았는지도 알려줄 수 있습니다. 방향 뒤에 out RaycastHit hit를 추가하세요. 메서드가 true를 반환하면 hit에 세부 정보를 채워 넣습니다. out은 C# 메서드가 전달받은 변수를 통해 추가 값을 돌려주는 방법입니다. 이 거리 측정기는 Space 키를 누르면 조준하는 대상과 그 대상까지의 거리를 기록합니다.

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        if (Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, 50f))
        {
            Debug.Log(hit.collider.name + " is " + hit.distance + " units away");
        }
    }
}

앞면이 12 유닛 앞에 있는 벽을 조준하면 Wall is 12 units away라고 기록됩니다. 다른 필드는 다음과 같습니다. hit.point는 광선이 표면에 닿은 월드 좌표상의 지점이고, hit.normal은 해당 지점에서 표면이 향하는 방향입니다(평평한 바닥에서는 (0, 1, 0)). hit.transform은 맞은 오브젝트의 Transform입니다. hit.collider.gameObject를 통해 태그처럼 해당 오브젝트에 대한 다른 정보에도 접근할 수 있습니다.

hit는 if 안에서만 읽으세요. 광선이 빗나가면 Raycast는 false를 반환하고 hit에는 유용한 값이 없습니다. collider는 null입니다.

challenge icon

챌린지

중급

총에 레이저 조준기를 달아 보세요. LaserSight 스크립트는 Gun에 있고, Inspector에서 빨간색 dot(Transform)과 range 15를 지정합니다. 왼쪽 및 오른쪽 화살표로 총을 돌립니다.

  • 매 프레임마다 총의 정면 방향으로 range만큼 광선을 쏩니다.
  • 광선이 무언가에 닿으면 점을 표시하고 광선이 표면에 닿은 정확한 위치에 놓습니다.
  • 아무것도 맞히지 않으면 SetActive(false)로 점을 숨깁니다.

Dot은 Ignore Raycast 레이어에 있으므로 광선은 점 자체를 통과합니다. Play를 눌러 벽, 상자, 통 위로 레이저를 움직인 다음 Check를 누르세요.

직접 해보기

using UnityEngine;

public class LaserSight : MonoBehaviour
{
    public Transform dot;
    public float range = 15f;

    void Update()
    {
        // 레이저가 표면에 닿는 곳에 dot을 배치하고, 레이저가 아무것도 맞히지 않으면 숨기세요.
    }
}
quiz icon실력 점검

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

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