컨텐트 드로워클릭후 +Add를 누르고 블루프린트 클래스를 선택한후 액터를 선택해 이름을 BP_Spawn으로 한다.
더블클릭해서 블루프린트 클래스 에디터를 열고 왼쪽위 Components Add를 눌러 Basic Shapes를 하나 추가한다.
뷰포트의 이벤트그래프를 클릭하고
액터의 인스턴스를 만드는 Sapwn Actor from Class라는 함수가 있다. 이 함수를 이벤트그래프에 추가하려면 이벤트그래프 패널을 우클릭해 컨텍스트 메뉴를 열고 검색 상자에 spawn을 입력해서 결과를 필터링한 다음 함수 이름을 클릭한다.
Class는 Fire를 검색해서 Blueprint Effect Fire를 선택해준다.
1을 누르면 실행하게 만들기 위해 컨텍스트메뉴을 열어 Keyboard Events 1을 선택하고 SpawnActor와연결한다.
SpawnActor의 Transform을 지정하기 위해 Get Actor Trnasform 노드를 추가하고 연결해준다.
다음은 SpawnActor로 생성된 Actor의 참조를 저정할 변수를 만들어도 되지만 다음과 같이 자동으로 만들 수 있다. Return Value를 끌어 새로운 노드를 만들면 컨텍스트창의 Promote to variable(변수로승격)을 누르면 자동으로 변수가 만들어진다.
만들어진 변수는 2를 누르면 액터를 지울때 사용할 것이다.
2를 누르면 New Var의 유효성을 체크하고 Destroy Actor 노드의 입력(Target)으로 사용되고 있다. 이제 큰 어려움없이 아래 이벤트 그래프를 만들수 있을 것이다.
저장하고 실행해보면 키보드 입력이 안먹는다. 아래와 같이 키보드입력을 활성화 해주는 노드를 넣어주어야 한다.
아니면 해당 액터의 디테일 input에서 Player0를 선택해주어야 한다.
레벨에디터로 돌아가서 컨텐트 드로워를 눌러 방금만든 BP_Spawn을 레벨에 끌어다 놓고 1을 누르면 생성되고 2를 누르면 없어지는 걸 볼 수 있다.
다음은 언리얼 공식 매뉴얼에 나오는 내용이며 위와 비슷하다.
종종 비디오 게임에서 플레이어는 캐릭터에 맞는 새로운 아이템이나 무기를 획득하여 계속 참여하고 싶을 때가 있으며, 경우에 따라 새로운 적이 등장하기도 합니다.
게임에서 게임플레이 도중 레벨에 아이템이나 적을 동적으로 추가하고 싶을 때가 있습니다. 이 경우를 스폰이라고 합니다.
이 안내서에서는 버튼을 누르면 액터 스포너에서 스폰할 액터 클래스를 만든 다음 다른 버튼을 누르면 스폰된 액터를 제거하는 로직을 만들겠습니다.
스폰할 액터 생성
이 섹션에서는 스피어 컴포넌트, 스태틱 메시 컴포넌트, 파티클 시스템 컴포넌트를 포함하는 액터를 생성합니다.
- 새 삼인칭(Third Person) 블루프린트(Blueprint) 게임 프로젝트를 생성합니다. 시작용 콘텐츠(Starter Content) 는 활성화 합니다. 프로젝트 이름을 SpawnDestroy 로 지정합니다.
- 콘텐츠 브라우저(Content Browser) 에서 추가/임포트(Add/Import) 버튼을 선택하고 BP_ActorToSpawn 이라는 이름의 새 블루프린트 액터(Blueprint Actor) 클래스를 생성합니다.
- 클래스 디폴트(Class Defaults) 에서 컴포넌트(Components) 탭으로 이동하여 컴포넌트 추가(Add Component) 를 선택합니다. 그런 다음 구체(Sphere) 컴포넌트를 검색하고 선택한 뒤 DefaultSceneRoot 위로 드래그하여 새 루트 컴포넌트(Root Component) 로 만듭니다.
- 구체 컴포넌트의 디테일(Details) 패널에서 셰이프(Shape) 카테고리로 이동하여 스피어 반경(Sphere Radius) 값을 16.0 으로 변경합니다.
- 피직스(Physics) 카테고리로 이동하여 Simulate Physics 변수 옆의 박스에 체크합니다.
- 컴포넌트(Components) 탭으로 이동하여 컴포넌트 추가(Add Component) 를 선택한 다음 Static Mesh 컴포넌트를 검색하고 선택합니다.
- 디테일(Details) 패널에서 Static Mesh 카테고리를 찾고 Static Mesh 변수 옆의 드롭다운 화살표를 선택합니다. 그런 다음 Shape_Sphere Static Mesh 에셋을 검색하고 선택합니다.
- 트랜스폼(Transform) 카테고리로 이동하여 스케일(Scale) 변수에서 X, Y, Z 값을 0.25 , 0.25 , 0.25 로 변경합니다. 그런 다음 위치(Location) 변수에서 Z 값을 -12.0 으로 변경합니다.
- 컴포넌트(Components) 탭으로 이동하여 컴포넌트 추가(Add Component) 를 선택합니다. Particle System 컴포넌트를 검색하고 선택합니다.
- 디테일(Details) 패널로 이동하여 파티클(Particles) 카테고리의 Template 변수 옆에 있는 드롭다운 화살표를 선택한 다음 P_Fire 를 검색하고 선택합니다.
- 블루프린트를 컴파일(Compile) 하고 저장(Save) 합니다.
완성된 블루프린트
액터 스포너 생성
이제 스폰할 액터를 생성했으니, 새 BP_ActorSpawn 블루프린트를 스폰할 커스텀 함수를 포함하는 액터 스포너를 생성하겠습니다.
- 콘텐츠 브라우저(Content Browser) 에서 추가/임포트(Add/Import) 버튼을 선택하고 BP_ActorSpawner 라는 이름의 새 블루프린트 액터(Blueprint Actor) 클래스를 생성합니다.
- 클래스 디폴트(Class Defaults) 에서 컴포넌트(Components) 탭으로 이동하여 컴포넌트 추가(Add Component) 를 선택합니다. 큐브(Cube) 컴포넌트를 검색하고 선택한 뒤 이름을 SpawnVolume 로 변경합니다.
- 이벤트 그래프(Event Graph) 를 우클릭하여 액션(Actions) 컨텍스트 메뉴에서 커스텀 이벤트 추가(Add Custom Event) 를 검색하고 선택한 다음 SpawnActor 로 명명합니다.
- SpawnActor 커스텀 이벤트의 실행 핀에서 드래그하여 실행가능 액션(Executable actions) 드롭다운 메뉴에서 Spawn Actor From Class 를 검색하고 선택합니다.
- SpawnActor 노드의 Class 핀에서 BP_ActorToSpawn 클래스를 선택합니다.
- Spawn Actor from Class 노드의 Spawn Transform 핀을 클릭하고 드래그하여 액션(Actions) 드롭다운 메뉴에서 Get Actor Transform 을 검색하여 선택합니다.
- 블루프린트를 컴파일(Compile) 하고 저장(Save) 합니다.
완성된 블루프린트
추가 캐릭터 액션 명령 설정
두 액터 클래스 BP_ActorToSpawn과 BP_ActorSpawner를 생성했으니, ActorSpawner의 SpawnActor 함수를 호출하는 함수 기능이 있는 삼인칭 캐릭터를 구성해야 합니다.
- 편집(Edit) > 프로젝트 세팅(Project Settings) > 엔진(Engine) > 입력(Input) 으로 이동한 후 바인딩(Bindings) > 액션 매핑(Action Mappings) 카테고리에서 + 버튼 을 클릭하여 이름이 SpawnActors 및 DestroyActors 인 매핑 두 개를 추가합니다.
- SpawnActors 액션 키 매핑을 숫자 1 키에 설정하고, DestroyActors 액션 키 매핑을 숫자 2 키에 설정합니다.
- 콘텐츠 브라우저(Content Browser) 에서 삼인칭 캐릭터(Third Person Character) 블루프린트로 이동한 다음 더블클릭하여 클래스 디폴트를 열고 이벤트 그래프(Event Graph) 를 우클릭합니다. 이 블루프린트에 대한 모든 액션(All Actions for this Blueprint) 컨텍스트 메뉴에서 SpawnActors 입력 액션을 검색하고 선택합니다.
- Pressed 실행 핀에서 드래그하여 실행가능 액션(Executable actions) 드롭다운 메뉴에서 Get Actor Of Class 노드를 검색하고 선택합니다. 그런 다음 Actor Class 드롭다운 화살표를 클릭하고 BP_ActorSpawner 를 선택합니다.
- Get Actor of Class 노드의 Return Value 핀에서 드래그합니다. 액션(Actions) 메뉴에서 Spawn Actor 함수 호출을 검색하고 선택한 다음 Get Actor Of Class 노드의 실행 핀을 Spawn Actor 노드의 실행 핀에 연결합니다.
- 이벤트 그래프(Event Graph) 를 우클릭하여 컨텍스트 메뉴에서 DestroyActors 입력 액션 이벤트를 검색하고 선택합니다.
- Pressed 실행 핀에서 드래그하고 실행가능 액션(Executable actions) 드롭다운 메뉴에서 Get All Actors Of Class 노드를 검색하여 선택합니다. 그런 다음 액터 클래스(Actor Class) 의 드롭다운 화살표를 클릭하고 BP_ActorToSpawn 을 선택합니다.
- Out Actors 반환 값 핀에서 드래그하여 드롭다운 메뉴에서 For Each Loop With Break 노드를 검색하고 선택합니다.
- Array Element 핀에서 드래그하여 액션(Actions) 메뉴에서 Destroy Actor 함수를 검색하고 선택합니다. 그런 다음 Get All Actors of Class 노드의 출력 실행 핀을 For Each Loop with Break 노드 의 실행 핀 에 연결합니다.
- 다음으로 For Each Loop with Break 노드의 Loop Body 실행 핀을 Destroy Actor 노드의 입력 실행 핀에 연결합니다.
- 컴파일(Compile) 하고 저장(Save) 합니다.
완성된 블루프린트
씬 설정
이제 플레이어 캐릭터가 BP_Spawner의 SpawnActor 함수를 호출하는 데 꼭 필요한 함수 기능 생성을 마쳤으니, 레벨에서 BP_Spawner의 위치를 선택해야 합니다.
- 콘텐츠 브라우저(Content Browser) 에서 BP_ActorSpawner 의 인스턴스를 레벨로 드래그합니다.
- 에디터에서 플레이(Play-In Editor, PIE) 를 선택하여 BP_ActorSpawner를 테스트합니다.
최종 결과
에디터에서 테스트할 때 1 키를 누르면 ActorSpawner 클래스가 레벨에 액터를 스폰합니다. 2 키를 누르면 레벨 내 모든 ActorsToSpawn이 소멸됩니다.
'블루프린팅 > 3. 객체지향과 프레임워크' 카테고리의 다른 글
[언리얼][블루프린트]게임플레이 프레임워크 클래스 탐색 (0) | 2023.05.08 |
---|---|
[블루프린트][객체지향] 컨스트럭션 스크립트 (0) | 2023.05.07 |
액터관리 (0) | 2023.05.06 |
OOP개념에 익숙해지기 (0) | 2023.05.06 |
객체지향 프로그래밍과 게임플레이 프레임워크 (0) | 2023.05.06 |