티스토리 뷰

개요


Actor와 Actor Component를 가지고 캐릭터 주위를 공전하는 Sphere를 만들어 보자.


튜토리얼에서 배울 수 있는 것들

  • Actor Component를 Actor에 추가하는 방법.

  • 물체가 원 운동을 하게 하는 방법.

  • Actor Component를 다루는 방법.






Actor - Planet


먼저 공전을 할 sphere를 만들어보자. 이 클래스는 static mesh component와 actor component를 추가만 하며, 움직이는 부분은 actor component가 담당하도록 할 것이다.


Unreal Editor

Actor를 상속받는 Planet C++클래스를 생성한다.

create actor.PNG




Code Editor

헤더에 사용할 인스턴스를 선언하고,

planet header.PNG


사용할 헤더를 cpp에 추가한다.

include.PNG


Planet은 움직이기만 할 뿐 충돌처리는 할 필요가 없으니, 생성자에 Static Mesh Component를 RootComponent로 추가한다.

planet constructor1.png


Actor Component를 만들고 그 컴포넌트를 생성하는 코드만 추가하면 Planet 클래스에서 할 일은 끝났다.




Actor Component - PlanetMovement


위 Sphere를 움직이게 할 Component 클래스를 만들어 보자. Actor가 움직이게 하는 코드를 이 클래스에 작성할 것이다.


Unreal Editor

Actor Component를 상속받는 PlanetMovement 클래스를 생성한다.

Actor Component는 기본적으로 TickComponent와 생성자 BeginPlay가 정의되어 있으며 가장 기본적인 기능만 가지고 있는 가벼운 Component이므로 특별히 다른 기능을 사용할 것이 아니라면 Actor Component를 만들고 원하는 기능을 작성하면 된다.

create actor component.PNG




Code Editor

매 프레임마다 호출되는 TickComponent를 override하고, 이 TickComponent가 실제로 동작하도록 생성자에서 설정을 해준다.

tick override.PNG

tick able.PNG


TickComponent override와 PrimaryComponentTick.bCanEverTick은 ActorComponent를 생성하면 기본적으로 다 작성된 상태로 생성되지만 위 코드가 있어야 TickComponent가 동작한다는 것쯤은 알고 넘어가는 것이 좋을 것 같다.

// 실제로 저 부분을 지웠다가 TickComponent가 동작하지 않아서 한참 헤맨 적이 있다.


헤더에 사용할 변수들을 선언하고, 생성자에서 초기화 한다.

_updateComponent는 부모 인스턴스 정도로 생각하면 될 것 같다. 나중에 Planet이 자신의 RootComponent를 저기에 대입할 것이다.


header

planet movement header.PNG


constructor

planet movement constructor.PNG


TickComponent에서 실제로 Actor의 좌표를 업데이트 한다. 간단히 삼각함수를 사용해서 회전운동을 하게 좌표를 업데이트 한다.

planet movement tick.PNG


다시 Planet 클래스로 돌아가서 만든 movement를 생성한다.

planet constructor2.png




적용


실제로 게임에서 동작하는 모습을 보자.


Unreal Editor

움직이는 Actor에 Planet을 부착하고,

add child.PNG


Planet의 static mesh를 shape_sphere로 설정한 후 실행시켜 보자.

Planet 헤더에서 static mesh를 UPROPERTY(EditAnywhere)로 설정했기 때문에 에디터에서 수정할 수 있다.

shape sphere.PNG


붙어있는 Actor를 중심으로 공전하는 것을 볼 수 있다.

큰 공이 CollidingPawn이며 작은 공이 Planet이다.

play.PNG


움직이는 Actor에 붙이지 않고, 그냥 화면 위에 추가시켜놓아도 원점을 중심으로 회전하는 것을 볼 수 있을 것이다.






마치며


component 종류도 너무 많고, 가장 간단한 actor component도 꽤 커서 다 익히려면 시간이 많이 걸릴 것 같다. 일단 뭔가를 구현하기 전에 해당 기능을 지원하는 component가 있는지 찾아봐야 하는 것이 너무 귀찮다. 그냥 기본만 익히고 내가 구현하는게 오히려 더 편할 수도 있겠다.



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함