티스토리 뷰
언리얼 엔진(Unreal Engine) 튜토리얼 - Actor Component로 공전하는 Sphere 만들기
글그리 2017. 10. 5. 17:38개요
Actor와 Actor Component를 가지고 캐릭터 주위를 공전하는 Sphere를 만들어 보자.
튜토리얼에서 배울 수 있는 것들
Actor Component를 Actor에 추가하는 방법.
물체가 원 운동을 하게 하는 방법.
Actor Component를 다루는 방법.
Actor - Planet
먼저 공전을 할 sphere를 만들어보자. 이 클래스는 static mesh component와 actor component를 추가만 하며, 움직이는 부분은 actor component가 담당하도록 할 것이다.
Unreal Editor
Actor를 상속받는 Planet C++클래스를 생성한다.
Code Editor
헤더에 사용할 인스턴스를 선언하고,
사용할 헤더를 cpp에 추가한다.
Planet은 움직이기만 할 뿐 충돌처리는 할 필요가 없으니, 생성자에 Static Mesh Component를 RootComponent로 추가한다.
Actor Component를 만들고 그 컴포넌트를 생성하는 코드만 추가하면 Planet 클래스에서 할 일은 끝났다.
Actor Component - PlanetMovement
위 Sphere를 움직이게 할 Component 클래스를 만들어 보자. Actor가 움직이게 하는 코드를 이 클래스에 작성할 것이다.
Unreal Editor
Actor Component를 상속받는 PlanetMovement 클래스를 생성한다.
Actor Component는 기본적으로 TickComponent와 생성자 BeginPlay가 정의되어 있으며 가장 기본적인 기능만 가지고 있는 가벼운 Component이므로 특별히 다른 기능을 사용할 것이 아니라면 Actor Component를 만들고 원하는 기능을 작성하면 된다.
Code Editor
매 프레임마다 호출되는 TickComponent를 override하고, 이 TickComponent가 실제로 동작하도록 생성자에서 설정을 해준다.
TickComponent override와 PrimaryComponentTick.bCanEverTick은 ActorComponent를 생성하면 기본적으로 다 작성된 상태로 생성되지만 위 코드가 있어야 TickComponent가 동작한다는 것쯤은 알고 넘어가는 것이 좋을 것 같다.
// 실제로 저 부분을 지웠다가 TickComponent가 동작하지 않아서 한참 헤맨 적이 있다.
헤더에 사용할 변수들을 선언하고, 생성자에서 초기화 한다.
_updateComponent는 부모 인스턴스 정도로 생각하면 될 것 같다. 나중에 Planet이 자신의 RootComponent를 저기에 대입할 것이다.
header
constructor
TickComponent에서 실제로 Actor의 좌표를 업데이트 한다. 간단히 삼각함수를 사용해서 회전운동을 하게 좌표를 업데이트 한다.
다시 Planet 클래스로 돌아가서 만든 movement를 생성한다.
적용
실제로 게임에서 동작하는 모습을 보자.
Unreal Editor
움직이는 Actor에 Planet을 부착하고,
Planet의 static mesh를 shape_sphere로 설정한 후 실행시켜 보자.
Planet 헤더에서 static mesh를 UPROPERTY(EditAnywhere)로 설정했기 때문에 에디터에서 수정할 수 있다.
붙어있는 Actor를 중심으로 공전하는 것을 볼 수 있다.
큰 공이 CollidingPawn이며 작은 공이 Planet이다.
움직이는 Actor에 붙이지 않고, 그냥 화면 위에 추가시켜놓아도 원점을 중심으로 회전하는 것을 볼 수 있을 것이다.
마치며
component 종류도 너무 많고, 가장 간단한 actor component도 꽤 커서 다 익히려면 시간이 많이 걸릴 것 같다. 일단 뭔가를 구현하기 전에 해당 기능을 지원하는 component가 있는지 찾아봐야 하는 것이 너무 귀찮다. 그냥 기본만 익히고 내가 구현하는게 오히려 더 편할 수도 있겠다.
'Programming > UnrealEngine' 카테고리의 다른 글
시작 프로젝트 파헤치기 - 퍼즐(1) (0) | 2018.04.23 |
---|---|
언리얼 엔진(Unreal Engine) 튜토리얼 - 인스턴스 생성하기 (3) | 2017.10.29 |
언리얼 엔진(Unreal Engine) 튜토리얼 - 디버깅 (0) | 2017.10.28 |
언리얼 엔진(Unreal Engine) 튜토리얼 - 기본 코드 살펴보기 (0) | 2017.10.28 |
언리얼 엔진(Unreal Engine) 튜토리얼 - 키 입력 처리하기 1(Axis) (0) | 2017.09.24 |
- Total
- Today
- Yesterday
- SHADER
- Git
- ios
- 수학
- DesignPattern
- rxswift
- machine learing
- C++
- SwiftUI
- 자료구조
- database
- Java
- winsock
- ue4
- Spring
- 드라마
- Cocos2d-x
- game
- SOCKET
- 운영체제
- C/C++
- 데이터베이스
- scala
- 알고리즘
- 국내여행
- mongoDB
- OS
- JSP
- C
- swift
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |