Unreal Engine 5 - Project Shooter (6): 레이저 포인터 구현

mingu Lee·2025년 8월 20일

1. 간단 요약


  • 레이저 포인터 Blueprint를 생성하고, Weapon에 부착함.
  • T 키를 눌렀을 때 레이저가 켜졌다가 꺼졌다가 하는 Input Action 및 함수 구현.
  • LineTrace를 사용하여 레이저가 거리에 따라 Scale이 달라지는 기능 구현.

2. 세부 과정


  1. 레이저 포인터 생성 및 부착
  2. 레이저 포인터 On/Off 기능
  3. LineTrace를 사용한 레이저 Scale 조절

2-1. 레이저 포인터 생성 및 부착


새로운 Actor 기반 BP를 생성하여 Static Mesh 추가 후 레이저 포인터 Mesh 할당.

레이저가 나오는 부분에 위치를 잡기 위해 SceneComponent를 추가하고, 레이저로 사용할 Cylinder를 추가함.

레이저는 어느 정도 투명해야하므로 기본으로 제공되는 Emissive Material을 복사하여 색상 변경 후 적용.

Weapon에 Child Actor Component를 추가하고, Child Actor Class를 위에서 만든 레이저 포인터 BP로 설정.

Weapon 상단에 부착시키고, 시야를 가리지 않도록 Scale을 조절.

2-2. 레이저 포인터 On/Off 기능


T 키를 눌렀을 때, 레이저 포인터가 On/Off 되는 기능을 만들기 위해 Input Action 생성 및 IMC에 Mapping.

이후 Character에서 키 Event가 발생했을 때 Weapon의 Toggle Laser 함수 호출.

Weapon의 Toggle Laser 함수는 다시 부착되어 있는 레이저 포인터의 Toggle Laser를 호출.

레이저 포인터의 Toggle Laser 함수는 현재 레이저 포인터의 상태에 따라 On/Off를 결정.

함수에 따라 레이저의 Visibility를 설정.

TurnOff는 TurnOn의 반대.

레이저 포인터가 On/Off 되는 것을 볼 수 있음.

2-3. Line Trace를 사용한 레이저 Scale 조절


레이저가 최대 25m를 가리키고, 중간에 가로막는 물체가 있다면 해당 지점까지만 레이저가 발사되어야 함.

이를 위해 레이저가 활성화 되었을 때, Tick마다 함수를 호출하여 Line Trace를 통해 레이저가 발사되는 위치에서 25m 사이에 충돌하는 물체가 있는지 확인.

충돌한 물체가 있다면 해당 물체 사이의 Distance 값을 저장.

Distance 값을 기반으로 레이저의 Scale 값을 설정.

Laser의 Z축 Scale이 1일 때 100uu 만큼 레이저가 발사되는데, Distance 값은 cm 기준이기 때문에 Distance 값에 100을 나누어주어야 함.

평상 시에는 레이저가 쭉 나아가다가 벽에 가로막히면 막힌 지점까지만 발사되는 것을 볼 수 있다.

3. 구현 중 발생한 문제 및 해결방안


  • 레이저의 Scale 값을 설정할 때 100을 나누어 적용했음에도 실제 거리가 짧게 나가는 현상이 발생.
    레이저 포인터를 Weapon에 부착할 때 크기가 너무 커서 Scale을 1보다 작게 설정했고, 레이저의 Scale을 조정할 때 Set Relative Scale 3D 노드를 사용했던 것이 원인.
    Set Relative Scale 3D 노드를 사용하면 부모의 Scale에 영향을 받기 때문에 부모의 Scale이 0.6이면 자식이 Scale을 1로 설정해도 실제 0.6이라는 값으로 계산됨.
    Set Relative Scale 3D 대신 Set World Scale 3D를 사용하여 부모의 Scale에 관계없이 World를 기준으로 Scale이 적용되도록 설정하여 해결함.

4. 오늘의 결과물


profile
Github: https://github.com/dlalsrn

0개의 댓글