언리얼 엔진에서 지원하는 Decal을 블루프린트를 이용하여 원하는 Actor 위에 보여주는 방법
https://answers.unrealengine.com/questions/2184/how-to-make-a-decal-and-spawn-it.html
To spawn the decal you can use either "Spawn Decal At Location" (for non-moving objects like wall) or "Spawn Decal Attached" (for moving objects like a vehicle).
당구공의 표면에 적색의 점을 표현하는 Decal을 생성하고 블루프린트에서 사용하는 예
CB에서 마우스 우측 > 머티리얼 > M_Decal_Red_Dot 등의 이름을 지정한다
더블클릭하여 머티리얼 에디터를 열고 왼쪽 아래의 [디테일] 뷰 / Material/Material Domain : Defered Decal 선택
사용할 텍스쳐가 알파채널을 가진 PNG 파일이라면 Blend Mode : Translucent 으로 설정한다
텍스쳐로 사용할 이미지를 CB에서 드래그하여 머티리얼 그래프에 놓고 RGB 핀을 [베이스 컬러] 핀에 연결한다
BP_Ball 클래스의 [이벤트 그래프]에서 다음과 같이 로직을 구성하고 게임을 실행하여 G 키를 누르면 플레이어 카메라가 바라보는 공의 정면에 위에서 준비한 Decal이 나타난다
마우스로 클릭된 액터의 표면에 데칼을 출력하는 예
ConvertMouseLocationToWorldSpace 노드는 마우스 커서의 2차원 좌표를 3차원 공간의 위치로 변환해준다. 그러나 그 위치는 마우스가 올려진 특정 액터의 표면 위치가 아닌 현재 영상이 보여지는 카메라의 표면의 위치에 해당하므로 마우스 커서 아래의 액터의 표면의 월드좌표를 구하려면 ConvertMouseLocationToWorldSpace 노드의 WorldLocation 핀과 WorldDirection을 사용하여 LineTraceByChannel 을 이용하여 라인이 충돌한 위치를 얻으면 된다
쉽게 표현하자면 ConvertMouseLocationToWorldSpace노드를 통해 얻은 마우스 커서의 월드좌표는 그 어떤 액터의 좌표를 의미하지 않고 모든 액터로부터 이격된 곳에 있는 카메라 렌즈상의 마우스 위치가 월드좌료로 리턴된다.
당구공을 마우스로 클릭하여 당점을 설정할 때 클릭된 당구공의 표면 월드좌료를 저장했다가 당구공에 충격을 가할 때 그 위치에 가하면(Add Impluse At Location) 당구공이 이동하면서 회전하는 효과를 낼 수 있다.
위의 그림에서 LineTraceByChannel 노드의 Ignore Self 항목에 체크를 해제해야 공 자신에게도 라인이 그려진다.
Decal을 그릴 때 적절히 회전하여 그리는 방법
Decal이 그려지는 위치는 LineTraceByChannel 을 통해 구할 수 있고 Decal이 그려질 때 액터 상의 그려지는 방향에 따라서 Decal도 적절히 회전하여 그려줘야 Decal의 정면이 보여진다.
간단한 벡터의 연산을 통해 Decal의 회전량을 구하는 방법은 아래의 내용을 참고하면 된다. 레벨 블루프린트를 이용한 경우이다