Unreal

[Unreal Engine 5] 12. 액터 스폰(spawn)하기

study_memo 2024. 2. 12. 01:52

이번에는 게임을 플레이하는 동안 씬에 액터와 오브젝트를 만들도록 하겠다. 

스페이스 바를 누르면 만든 새 발사체에 임펄스를 추가해 씬과 게임을 더 역동적으로 만들 것이다. 

 

스포닝(spawning)이란?

플레이 중 오브젝트를 만드는 것

보통 게임에서 총을 쏠 때 발사체를 만드는데 이를 스폰이라고 하며, 플레이하는 중에도 레벨 안에 액터를 스폰할 수 있다. 

 

발사체 중 하나를 레퍼런스로 사용해 발사체가 어디에서 스폰될 지 알아내도록 하겠다. 

레벨 블루프린트를 확인해보면 다음과 같은데, 

Add Impulse에서 스페이스 바 이벤트 연결을 먼저 끊고 

 

spawn actor from class 를 클릭해준다. 

 

여기서 노드가 어떻게 작동할 지 지시하려면 몇 가지 속성을 건드려줘야 한다. 

 

먼저 인스턴스를 만들 블루프린트 클래스가 어떤 클래스인지 지정해야 한다. 

class를 BP_Projectile로 지정하였다.

 

여기서 Spawn Transform 이란 무엇일까?

Transform이란 오브젝트의 위치, 회전 , 크기를 가리킨다. 

Spawn Transform을 우클릭한 후 split struct pin을 누르면 다음과 같이 분할할 수 있다.

각각을 원하는 설정값으로 바꾸면 새로 만든 발사체를 사용자가 원하는 특정 위치에 놓을 수 있다. 

나는 다음과 같이 설정을 했다. (위의 Transform 설정이랑 똑같이 했다. )

 

그 후 플레이를 누르고 스페이스바를 누르면, 두 번째 발사체가 첫 번째 발사체가 있던 정확한 위치에 생긴다. 

 

 

여기서 spawn actor노드를 보면

스폰 액터에 출력할 반환 값 핀이 있다. (빨간 밑줄 표시)  반환 값 핀을 어떻게 하면 좋을까?

 

여기서 잠깐, 반환이란?

반환은 노드의 출력을 의미한다.  출력은 해당 노드를 실행시킨 결과로 나오는 데이터나 오브젝트를 말한다. 

 

다시 돌아와서, 

이제 블루프린트에서 큐브 레퍼런스는 없애도 되는데, 이제 큐브에 임펄스를 추가하지 않아도 되기 때문이다.  (-> [Unreal Engine 5] 10. 임펄스 (cf. 포스) 참고)

대신, 우리가 만든 발사체에 추가를 해야한다. 

 

그렇다면 임펄스를 어떻게 연결할 수 있을까?

 

이번에는 임펄스를 추가하려는 대상이 스테틱 메시이다. 스테틱 메시를 가져오려 하는 위치는 발사체이다. 

그러므로 새 발사체를 만들고, 스테틱 메시 컴포넌트를 가져오고, 다음으로 임펄스를 추가하면 된다. 

 

그 후 

실행 핀을 연결하여 임펄스 추가가 액터를 스폰한 다음에 실행되도록 한다. 

 

그러면 스페이스 바를 누를 때마다 레벨에 스폰되는 새로 생긴 발사체에 임펄스가 약간 추가되었음을 확인할 수 있다. 

 

(원한다면 임펄스의 값을 높일 수도 있는데  현재 z값(400)을 1000정도로 높이면 공중으로 더 높이 점프해서 더 재미있고 보기에도 좋아진다.)