마우스를 이용하여 큐(Cue) 움직이기
당구 큐(Cue)를 만들고 C키를 누르면 플레이어 카메라 앞 아래에 큐가 나타나고 마우스 우측으로 큐를 클릭하여 큐를 선택한 후 마우스를 앞뒤로 움직이면 큐가 공을 향하여 앞뒤로 움직이게 한다. 큐가 놓일 때는 공을 향하게 하고 큐를 선택하여 큐를 앞뒤로 움직이면 큐가 공을 칠 수 있도록 하는 것이 목표이다.
여기서 공은 클래스 블루프린트 없이 그냥 기본 구(Sphere)를 드래그하여 뷰포트에 놓으면 된다
1. BP_Cue 클래스 블루프린트 생성
당구 Cue를 표현한 클래스 블루프린트를 생성한다(Actor 기반)
Static Mesh 를 컴포넌트로 추가하고 Static Mesh를 선택한 후 우측 [디테일]뷰 Static Mesh 항목에서 Shape_Cylinder 를 선택하여 설정한다
뷰포트에서 실린더가 길이방향이 X축과 평행하도록 회전툴을 사용한다
당구공의 크기에 적합한 굵기와 크기로 실린더를 조정한다
2. BP_Cue 이벤트 그래프에 다음과 같은 내용을 작성한다 (마우스로 클릭된 액터가 BP_Cue인지 확인하는 방법을 잘 이해야야 한다)
큐가 놓인 방향을 향하여 앞뒤로 움직이도록 하는 한가지 방법을 적용한다
3. 레벨 블루프린트에는 다음 내용을 작성한다(큐가 공을 향할 수 있도록 큐의 위치와 회전량을 계산하는 방법을 이해해야 한다)
마우스로 액터를 클릭할 때 마우스 커서 아래에 있는 액터를 확인하는 방법
GetPlayerController 함수를 통해 얻은 객체에 포함된 2개의 함수를 이용하면 된다
- GetHitResultUnderCursorByChannel : 액터의 Collision이 Block 으로 설정된 경우 사용 가능
- GetHitResultUnderCursorforObjects : 액터의 Collision이 Overlap으로 설정된 경우 사용 가능
4. 큐와 공의 충돌 후 적절한 충돌반응 구현하기
BP_Cue 액터의 Collision 설정이 Block 으로 된 경우에는 공과 충돌할 경우 그 즉시 언리얼 물리엔진이 적용되어 당구공과 같은 현상을 구현하기 곤란하므로 BP_Cue 액터의 Collision을 Overlap으로 설정한 후에 Overlap 이벤트에서 Add Impulse at Location 노드를 사용하여 실제 당구공과 유사한 물리현상(당구공의 이동과 회전)을 구현할 수 있다. 당구공은 Collision 설정을 Block으로 해야 한다.
당구공은 Block, 큐는 Overlap으로 설정하면 큐와 공이 충돌했을 때 양쪽 모두에서 Overlap 이벤트가 발생하므로 둘 중 하나를 선택하여 로직을 구현하면 된다. 큐와 공의 충돌시 공측의 반응이 중요하므로 공 클래스에 충돌반응을 구현하면 된다
당구공 클래스와 큐 클래스는 다음과 같이 아주 간단하게 만들어 테스트할 수 있다
아래의 내용은 마우스에 따라 큐를 움직여 공을 치면 큐의 방향과 속도에 따라서 공의 방향과 속도가 결졍되는 내용이다.
공을 마우스 왼쪽으로 클릭하면 그 지점에 당점이 표시되고 C 키를 누르면 당점을 향하여 큐가 생성되어 보여진다.
큐를 마우스 우측으로 클릭한 후에 마우스를 움직이면 마우스의 상하위치(Y값)에 따라서 큐도 전후로 움직인다. 마우스를 빠르게 앞으로 밀어서 공을 치면 큐가 당점을 치게 되고 공은 큐의 방향과 속도에 따라서 이동하게 되며 큐는 사라진다. 공이 이동할 때는 당점의 위치에 따라서 공이 회전하면서 이동하므로 당구공의 회전에 따른 가시적, 물리적 효과를 낼 수도 있다.
큐(BP_Cue) 클래스 블루프린트 만들기
위의 그림에서 컴포넌트로 추가된 Static Mesh에 우측 [디테일] 뷰의 Static Mesh항목에서 Shape_Cylinder를 선택하고 뷰포트에서 x축 방향으로 실린더를 눕혀놓고 길이와 두께를 조절하면 된다. Static Mesh컴포넌트를 선택했을 때 우측 [디테일]뷰의 Physics 패널과 Collision 패널은 다음과 같이 설정한다
BP_Cue클래스의 Static Mesh 컴포넌트의 속성설정
BP_Ball 클래스 블루프린트 생성
위의 컴포넌트 패널에서 Static Mesh를 선택하고 우측 [디테일] 뷰의 Physics, Collision 패널은 다음과 같이 설정한다
BP_Ball 클래스 블루프린트의 Static Mesh 컴포넌트 속성설정
레벨블루프린트의 내용
BP_Cue 클래스 블루프린트의 내용
BP_Ball 클래스 블루프린트의 내용