010-2135-9730무료 상담
개념 풀이

레이캐스트란? 처음 배우는 사람을 위한 쉬운 설명

레이캐스트(Raycast)는 게임 공간의 한 점에서 특정 방향으로 보이지 않는 직선(레이)을 쏘아, 그 선이 처음 부딪히는 물체가 무엇인지, 어디에 닿았는지 알아내는 기능입니다. 총알이 어디에 맞았는지, 캐릭터 발밑에 땅이 있는지, 적이 플레이어를 볼 수 있는지 같은 질문에 답할 때 씁니다. 거의 모든 3D 게임에 들어가는 기본 도구라서, 게임 프로그래밍을 배우면 일찍부터 자주 만나게 됩니다.

읽는 시간 약 7분게임프로그래밍
게임프로그래밍 과정
이 글과 연결된 과정게임프로그래밍 과정 알아보기

게임 프로그래머는 기획서의 규칙을 실제로 돌아가는 코드로 바꾸는 사람입니다. 수업은 C 언어와 C++로 변수, 함수, 포인터, 객체지향 같은 기본기를 단단히 …

보이지 않는 레이저 포인터를 쏘는 것

어두운 방에서 레이저 포인터를 벽에 비추면 빨간 점이 찍힙니다. 그 점을 보면 레이저가 어디까지 가서 무엇에 닿았는지 알 수 있습니다. 레이캐스트는 이 레이저 포인터를 게임 속에서 눈에 보이지 않게 쏘는 것과 같습니다.

레이캐스트에 필요한 정보는 세 가지입니다. 어디서 쏠지(시작점), 어느 방향으로 쏠지(방향), 얼마나 멀리까지 확인할지(최대 거리)입니다. 엔진은 이 선을 따라가며 충돌체(collider)를 가진 물체와 부딪히는지 계산하고, 닿았다면 결과를 알려 줍니다.

결과에는 보통 맞은 물체, 맞은 지점의 좌표, 시작점에서의 거리, 맞은 면이 향하는 방향(법선) 등이 담깁니다. 이 정보로 총알 자국을 벽면 방향에 맞게 붙이거나, 거리에 따라 피해량을 줄이는 계산을 할 수 있습니다.

게임에서 레이캐스트를 쓰는 장면

상황쏘는 방향알고 싶은 것
총 쏘기(히트스캔)총구 또는 화면 중앙에서 앞으로무엇에 맞았는지, 어디에 맞았는지
땅 감지캐릭터 발밑에서 아래로 짧게지금 땅에 서 있는지, 경사가 얼마인지
적의 시야적의 눈에서 플레이어 쪽으로사이에 벽이 있는지
마우스 클릭 선택카메라에서 마우스 위치 방향으로클릭한 유닛이나 지점
카메라 충돌캐릭터에서 카메라 쪽으로카메라가 벽에 파묻히지 않을 거리

히트스캔 방식의 총은 총알을 실제로 날려 보내지 않습니다. 방아쇠를 당기는 순간 레이를 쏘고, 닿은 대상에 바로 피해를 줍니다. 그래서 빠르고 정확합니다. 반면 수류탄이나 화살처럼 날아가는 모습이 보여야 하는 무기는 실제 물체를 날리는 방식을 씁니다.

전략 게임에서 화면을 클릭해 유닛을 움직이는 기능도 레이캐스트입니다. 모니터는 평면인데 게임 세상은 입체라서, 카메라에서 마우스가 가리키는 방향으로 레이를 쏴 땅의 어느 지점을 눌렀는지 계산합니다.

엔진에서 레이캐스트를 쓰는 모습

Unity에서는 Physics.Raycast 함수로 레이를 쏘고, 맞은 결과를 RaycastHit이라는 구조에 받아옵니다. 2D 게임에서는 Physics2D 쪽의 별도 함수를 씁니다. Unreal Engine에서는 같은 개념을 라인 트레이스(Line Trace)라고 부르며, 블루프린트에서 Line Trace By Channel 노드로 쉽게 사용할 수 있습니다.

선 대신 공이나 상자 모양으로 쓸어 보는 방식도 있습니다. Unity의 SphereCast, Unreal의 Sphere Trace가 그런 예입니다. 가는 선은 좁은 틈을 빠져나가 버리는 경우가 있어서, 캐릭터처럼 두께가 있는 대상의 이동 경로를 확인할 때는 이런 굵은 판정이 더 알맞습니다.

레이캐스트 함수는 보통 맞았는지 여부를 참·거짓으로 돌려줍니다. 맞지 않았을 때 결과 정보를 읽으려 하면 비어 있는 값을 쓰게 되어 오류가 나기 쉬우니, 반드시 맞았을 때만 결과를 꺼내 쓰는 구조로 코드를 짜야 합니다.

원하는 것만 맞히는 레이어 필터

레이캐스트는 기본적으로 처음 부딪히는 충돌체에서 멈춥니다. 그래서 의도하지 않은 물체에 먼저 맞는 일이 자주 생깁니다. 총을 쐈는데 내 캐릭터 몸에 먼저 맞거나, 투명한 트리거 영역에 막혀 적까지 닿지 않는 경우입니다.

이 문제는 레이어나 채널로 걸러서 해결합니다. 오브젝트를 '플레이어', '적', '벽', '트리거' 같은 층으로 나누고, 레이를 쏠 때 확인할 층만 지정하는 것입니다. 땅 감지 레이는 '지형' 층만, 시야 확인 레이는 '벽'과 '플레이어' 층만 보도록 설정하면 판정이 훨씬 정확해집니다.

처음부터 레이어 규칙을 정해 두면 나중에 고생을 덜 합니다. 프로젝트 중간에 층 구조를 바꾸면 이미 만들어 둔 레이캐스트 설정을 모두 다시 확인해야 하기 때문입니다.

처음 쓸 때 자주 하는 실수

  • 방향과 목표 지점을 헷갈림: 방향 자리에 목표 좌표를 넣으면 엉뚱한 곳으로 쏘게 됩니다. 목표에서 시작점을 빼서 방향을 구해야 합니다.
  • 시작점이 물체 안에 있음: 캐릭터 몸 한가운데서 쏘면 자기 충돌체에 바로 맞습니다. 시작점을 조금 앞으로 옮기거나 자기 층을 제외합니다.
  • 거리를 무한으로 둠: 필요 이상으로 길게 쏘면 계산이 늘어나고 먼 곳의 물체가 걸리기도 합니다.
  • 충돌체가 없는 물체를 맞히려 함: 화면에는 보여도 충돌체가 없으면 레이는 그냥 통과합니다.

레이캐스트는 눈에 보이지 않아서 문제가 생겨도 원인을 찾기 어렵습니다. 그래서 디버그용으로 레이를 화면에 선으로 그려 보는 습관이 중요합니다. Unity의 Debug.DrawRay, Unreal 트레이스 노드의 디버그 표시 옵션을 켜면 레이가 어디서 어디로 나갔는지 바로 확인할 수 있습니다.

이름과 연락처만 남기면 담당 멘토가 연락드립니다상담 가능 시간 평일·주말 · 전화 010-2135-9730

작은 기능 세 개로 연습해 보기

첫째, 캐릭터가 땅에 있을 때만 점프할 수 있게 발밑 레이캐스트를 만들어 보세요. 둘째, 클릭한 바닥 지점으로 캐릭터가 걸어가게 만들어 보세요. 셋째, 벽 뒤에 숨으면 적이 플레이어를 못 보게 시야 레이를 넣어 보세요. 세 가지를 만들어 보면 시작점, 방향, 거리, 레이어 설정이 왜 중요한지 자연스럽게 익힐 수 있습니다.

여기서 더 나아가 경사면 각도에 따라 미끄러지게 하거나, 레이로 벽 타기 가능 여부를 판단하는 기능도 만들어 볼 수 있습니다. 이런 작은 기능을 하나씩 쌓아 플레이 가능한 게임으로 엮어 보고 싶다면, SBS아카데미게임학원 유니티3D(Unity) 과정 상담에서 직접 만든 기능 목록을 보여 주고 포트폴리오로 발전시킬 방향을 상의해 보세요.

자주 묻는 질문

레이캐스트를 많이 쓰면 게임이 느려지나요?

한 번의 레이캐스트는 가볍지만, 수많은 오브젝트가 매 프레임 여러 번 쏘면 부담이 됩니다. 필요한 순간에만 쏘고, 거리와 레이어를 좁혀 두면 대부분 문제가 되지 않습니다.

레이 하나로 여러 물체를 동시에 맞힐 수 있나요?

가능합니다. 선 위에 있는 모든 물체를 돌려주는 함수가 따로 있어, 관통 공격처럼 여러 대상을 맞히는 기능에 씁니다.

TIP내 상황에 맞는 답이 필요하다면 무료 상담에서 지금 수준과 목표를 기준으로 구체적으로 안내해 드립니다.

가까운 캠퍼스에서 게임프로그래밍 알아보기

사는 곳과 가까운 캠퍼스를 고르면 수업 내용, 오시는 길, 상담 신청을 한 번에 볼 수 있습니다.

함께 읽으면 좋은 글

Free consulting

게임프로그래밍, 내 상황에서는 어떻게 시작할까요?

글에서 다룬 내용을 내 실력과 목표에 맞춰 담당 멘토가 구체적으로 정리해 드립니다.

  1. 상담 신청서 접수
  2. 담당 멘토가 연락드림
  3. 방문 또는 전화로 진로·과정 상담
전화로 바로 상담010-2135-9730
전화 상담상담 신청