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

레이저가 나오는 부분에 위치를 잡기 위해 SceneComponent를 추가하고, 레이저로 사용할 Cylinder를 추가함.
레이저는 어느 정도 투명해야하므로 기본으로 제공되는 Emissive Material을 복사하여 색상 변경 후 적용.

Weapon에 Child Actor Component를 추가하고, Child Actor Class를 위에서 만든 레이저 포인터 BP로 설정.
Weapon 상단에 부착시키고, 시야를 가리지 않도록 Scale을 조절.


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 되는 것을 볼 수 있음.
레이저가 최대 25m를 가리키고, 중간에 가로막는 물체가 있다면 해당 지점까지만 레이저가 발사되어야 함.
이를 위해 레이저가 활성화 되었을 때, Tick마다 함수를 호출하여 Line Trace를 통해 레이저가 발사되는 위치에서 25m 사이에 충돌하는 물체가 있는지 확인.
충돌한 물체가 있다면 해당 물체 사이의 Distance 값을 저장.


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

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

평상 시에는 레이저가 쭉 나아가다가 벽에 가로막히면 막힌 지점까지만 발사되는 것을 볼 수 있다.
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이 적용되도록 설정하여 해결함.