티스토리 뷰

개요


언리얼 엔진 공식 홈페이지에 있는 튜토리얼을 보면, 스스로 spawn하고 spawn 해제하는 행동을 하는 컴포넌트를 작성해 보라는 숙제가 있다.

영어 원문을 봐도 정확히 어떤 결과를 원하는건지 몰라서 마음대로 해석했다.


  • Build a Component that spawns up to three children, each of which despawn on their own after a set amount of time.


런타임 중에 인스턴스를 생성해서 게임에 보여지게 했다가, 타이머가 끝나면 다시 해제하는 프로그램을 만들어 보자. 스페이스 바를 누르면 3개의 큐브를 주위에 생성하고, 생성된 큐브는 일정 시간이 지나면 사라진다.






Spawner Componenet


생성 및 해제 역할을 할 컴포넌트를 만든다. Actor Component를 상속받는 클래스이므로, Actor에 붙혀서 사용할 수 있다. Pawn Actor에 붙힐 것이기 때문에 적합하다.

Spawner는 부모 Actor 주위에 3개의 지정된 mesh를 생성하며, 일정 시간이 지나면 해제한다.


Code Editor

에디터에서 mesh를 설정할 수 있도록 UPROPERTY(EditAnywhere) 로 UStaticMesh* 변수를 만든다.

1.PNG


인스턴스 생성을 담당할 SpawnSphere함수를 작성한다.

// 원래는 공모양만을 spawn했기 때문에 함수 이름이 SpawnSphere이다.

인터넷에 죄다 블루프린트로 작성된 강좌들만 있어서 동작하는 코드를 작성하기 까지 굉장히 오랜 시간이 걸렸다.

지금까지 사용하던 CreateDefaultSubobject는 생성자에서만 사용할 수 있고, 런타임 중에 사용할 경우 에디터가 죽어버린다. 그래서 생성자가 아닌 곳에서는 비슷한 역할을 하는 NewObject를 사용한다.

2.PNG


NewObject의 파라미터는 순서대로 outer, class, name 등이 들어가는데, 의미하는 값은 이렇다.



UObject* outer

component의 owner object. 즉 지금 만든 컴포넌트가 붙을 오브젝트이다.

SetupAttachment() 함수로 붙히는 것과는 의미가 조금 다른데, SetupAttachment()는 SceneComponent를 SceneComponent에 붙히는 것이고, outer는 component의 주인을 설정하는 것이다.

일반적으로 component를 사용할 오브젝트가 NewObject를 사용할 것이기 때문에 this를 사용하면 거의 맞다.



UClass* class

생성할 component의 UClass*. StaticClass로 해당 c++클래스의 UClass*를 얻어올 수 있으므로 사용하면 된다.



FName

component의 이름.



사실 outer만 지정해 주어도 나머지는 미리 default 값으로 지정되어있다. 뒤에 파라미터들이 더 있지만 이 세가지는 직접 입력할 수 있도록 오버로딩되어있기 때문에 알고 있으면 좋을 것 같다.

이 세가지 파라미터들은 모두 에디터에서 표기하기 위해 코드를 리플렉션 하는 과정에 사용되는 것으로 추정된다.


생성한 component는 기존과 비슷하게 설정하고 사용하면 된다.


TickComponent에서 생성하고, 3초가 지나면 DestroyComponent로 component를 삭제한다.

3.PNG



Pawn Actor


이렇게 만든 component를 사용하기 위해 actor코드로 이동한다. pawn actor는 기본적인 이동을 하도록 키 입력을 처리하는 코드를 사용한다.



component를 설정하고, UpdatedComponent를 RootComponent로 지정한다.

4.PNG



키를 입력하면 위에서 만든 SpawnSphere를 호출한다.

Action()은 스페이스 바에 바인딩 되어있다.

5.PNG



Unreal Editor

에디터로 돌아와서 pawn을 생성해보면, Spawner component가 추가된 것을 볼 수 있다.

7.PNG


Spawn component를 클릭하면 UPROPERTY로 등록해 놓은 변수들을 볼 수 있는데 이곳에서 spawn할 mesh를 설정할 수 있다. 지속시간도 에디터에서 변경할 수 있도록 하기 위해 LifeTime도 등록해 두었다.

6.PNG


스페이스 바를 누르면 3개의 mesh가 주위에 생성되고 지정한 시간이 지나면 사라지는 것을 볼 수 있다.

8.PNG






마치며


언리얼 엔진이 원래 코드 작성은 거의 안하고 블루프린트로만 하는 것인지, 블루프린트가 쉬워보여서 그런건지 몰라도 관련 c++레퍼런스가 너무 부족하다.

블루프린트는 부가적인 요소로만 생각해서 안하고있었는데 좀 배워야할 것 같다.



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