Camera/Camera Orbit2017. 10. 24. 07:36

월드의 중심에 있는 큐브의 주위를 회전하는 폰(Pawn) 카메라 예제




F키를 누를 때마다 5도씩 월드의 원점(0,0,0) 주위를 선회하며 큐브 중심에 시점을 고정하는 카메라의 예이다.


GameModeBase 를 기반으로 커스텀 GameMode 블루프린트를 생성하고, DefaultPawn을 기반으로 커스텀 Pawn 블루프린트를 생성한 다음, 커스텀 GameMode의 Default Pawn Class 항목에 위에서 생성한 커스텀 폰을 지정하고 레벨 블루프린트에 아래의 내용을 입력하면 테스트할 수 있다.


이렇게 하면 언리얼이 지원하는 키보드, 마우스 네비게이션을 모두 사용할 수 있고, F키를 눌러 월드의 중점에 시점을 고정하고 주위를 선회하는 기능을 작성할 수 있다.


SetActorRotation 노드를 이용하여 폰이 회전하지 않는다면 PlayerController의 SetControlRotation 노드를 사용하면 된다







Posted by cwisky
Billiard/Cue Movement2017. 10. 14. 22:01

당구 큐(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 클래스 블루프린트의 내용

Posted by cwisky
Billiard/pixlr.com2017. 10. 13. 20:50

1. 배경을 투명하게 처리할 이미지를 준비한다



2. https://pixlr.com/ 접속하여 [컴퓨터로부터 이미지 열기]를 클릭한다



2. 보기>줌인 기능을 이용하여 이미지를 확대하고 필요한 부부만을 잘라내기 위해 사각 선택툴로 이미지의 필요부분만 선택한다




3. 이미지 > 오려내기 를 사용하여 필요한 부분만 오려낸다


4. 오려내기를 마친 후 보기 > 실제픽셀 을 선택하여 원래 이미지의 크기로 되돌아 간다


5. CTRL+A 를 누르고 이미지 전체를 클립보드에 복사(CTRL+C)한다

6. 파일 > 새 이미지 를 선택하고 아래와 같이 설정한다. 이 설정 결과 클립보드에 저장된 이미지와 동일한 크기의 배경이 투명한 빈 이미지가 생성된다.


7. 격자무늬의 바탕에서 CTRL+V를 누르면 새로운 레이어가 생성되면서 클립보드에 저장된 이미지가 붙여넣기 된다


8. 요술지팡이 선택툴을 사용하여 이미지의 빈 부분(흰색부분)을 선택하고 DELETE 키를 누르면 색상이 제거된다



9. 레이어 > 보이는 레이어 병합을 선택하여 모든 레이어를 병합한다


10. 파일 > 저장 을 선택하고 PNG 형식을 선택하여 [확인] 버튼을 누른다

Posted by cwisky