1. Triggerable Light
빈 액터를 추가하고, 액터에 point light와 box collision을 추가한다. 블루프린트를 추가하여 begin overlap, end overlap에 대한 이벤트를 추가한다. 각 이벤트에 set Visibility를 연결하고, begin의 경우 new Visibility 체크. Construction script에서 set Visibility, set Intensity, set LightColor를 차례로 연결하고 각 속성을 변수로 선언한다. 컴파일하면 Construction Script가 실행되면서 각 함수들이 실행된다. 변수로 선언된 각 노드들이 업데이트된다. 각 변수의 디테일 패널에서 인스턴스 편집가능에 체크하면, 레벨 뷰의 디테일 패널의 기본탭에 변수들이 추가되고 수정할 수 있게된다. Set Light Color의 SRGB가 체크되어 있으면 RGB로 색을 바꿀 수 있고, 체크를 해제하면 색 선택기에서 편집할 수 있다.
2. Pickup
레벨뷰에 픽업아이템으로 사용할 아이템을 하나 배치한다.
아이템의 Collision 탭에서 콜리전 프리셋을 OverlapOnlyPawn으로 설정한다. 이렇게 하면 Pawn과 Pawn의 자식 클래스인 Character만 아이템과 겹칠 수 있다. 그리고 Generate Overlap Event를 체크한다. 무언가가 아이템에 오버랩되면 이벤트를 발생한다.
아이템에 블루프린트를 추가한다. ActorBeginOverlap 이벤트를 추가하고, Spawn Emitter at Location 함수, Destroy Actor 함수와 차례로 연결한다.
Spawn Emitter at Location 함수에서 스폰할 파티클 에셋을 선택한다. location에 getActorLocation 함수를 연결한다.
ActorBeginOverlap 이벤트의 Other Actor는 어떤 액터가 자기 자신과 겹쳐졌는지를 반환한다. 여기에 cast(형변환)함수를 연결한다. Character 에 형변환 함수를 OtherActor와 연결한다. 자기 자신과 겹쳐진 액터가 캐릭터인지 확인한다. as Character에서 Character Movement를 연결하고 Set Max WalkSpeed함수를 호출해 속도를 1500으로 설정한다.
전체적으로 실행 순서를 ActorBeginOverlap-SpawnEmitter-Character형변환-Set-DestroyActor로 연결한다.
3. Custom Projectile
블루프린트 클래스를 하나 만들고 부모 클래스를 Actor로 설정한다. BoxCollision 컴포넌트를 추가하고 디테일패널-Collision의 콜리전 프리셋 - BlockAllDynamic선택
Static Mesh 컴포넌트를 추가하고 Mesh에 아이템 추가(SM_Statue). Collision과 Mesh 크기 맞추기
Particle System 컴포넌트 추가
Projectile Movement 추가 Velocity의 x를 200으로, Speed를 2000로 설정. Should Bounce 체크
Rotating Movement 추가 Rotating Rate를 0, 45, 0 으로 수정
투사체가 멈추면 회전도 멈추도록 Projectile Movement에서 On Projectile Stop의 + 클릭한다. Rotating Movement의 Set과 연결한다. Collision을 가져와 Set Simulate Physics를 SET다음에 실행하도록 연결하면, 이동을 멈추면 회전도 멈추면서 피직스 오브젝트로 설정된다.
기본 캐릭터의 블루프린트인 FirstPersonCharacter 블루프린트를 열고, 총을 발사하는 액션에 대한 스크립트를 작성한다. Fire 입력 액션(총을 발사하는 액션, 없으면 우클릭으로 마우스 왼쪽 버튼 이벤트를 생성한다) 이벤트의 Pressed에 Spawn Actor From Class 함수를 연결한다.
이벤트 그래프를 우클릭하여 GetActorLocation과 GetControlLocation을 추가한다. GetActorLocation은 캐릭터의 위치를 반환하고, GetActorRotation은 게임 내에서 움직이는 마우스의 회전을 반환한다. 즉 캐릭터가 바라보며 조준하는 방향을 반환한다.
Make Transform의 Rotation에 GetActorRotation을 연결한다. 그리고 Location에는 GetActorLocation에 전방으로 800Unit을 더한 값을 연결한다.
MakeTransfor의 반환값을 SpawnActor에 연결한다
4. Spawning Physics Actors
Physics Actor 블루프린트를 레벨에 소환하는 방법.
콘텐츠 폴더에 Actor를 부모클래스로 하는 새 블루프린트 클래스(이름을 PhysicsObject로 변경)를 생성한다. Static Mesh 컴포넌트를 추가하고, Table 메시를 적용한다. Simulate Physics에 체크한다.
레벨 블루프린트를 연다. Q키 입력에 대한 이벤트를 생성하고 Spawn Actor from Class에 연결한다. Class에서 Physics Object를 선택한다.
레벨 뷰에서 타겟 포인트를 배치한다. 타겟 보이트는 스폰 위치를 정의할 때 유용하다.
레벨 블루프린트에서 TargetPoint에 대한 레퍼런스 생성, get Actor Transform과 연결, SpawnActor함수의 Spawn Transform에 연결.
레벨에 여러개의 타겟포인트를 배치하고 랜덤으로 오브젝트 생성
레벨 블루프린트에서 get all actors of class로 모든 target point클래스의 actor의 배열을 반환. random integer in range호출해서 last index를 max값으로.
*배열의 인덱스는 어떻게 매겨지는건가? 오브젝트 이름으로? 이름을 바꾼다면? 오브젝트가 생성된 시간순? 인덱스를 수정하려면?
5. Blueprint Communication
Actor를 부모클래스로 갖는 블루프린트 클래스를 만들고 StaticMesh 컴포넌트 추가, 큐브 Mesh 입히고 메테리얼 추가.
이벤트 그래프에서 Custom Event 추가. 이 이벤트는 현재 블루프린트 클래스 뿐만 아니라 해당 프로젝트의 다른 불루프린트에서도 호출할 수 있다. 이 custom 이벤트를 이용하여 블루프린트끼리 통신한다.
이벤트의 이름을 MoveCubeEvent로 바꾸고, 디테일 패널의 입력 세션에서 +를 눌러 파라미터를 추가 offset이라는 이름의 float로 설정
z축으로 offset만큼 이동하는 이벤트
레벨에 큐브 배치하고 레벨블루프린트에서 e버튼을 누르면 moveablecube 이벤트 실행하여 cube를 z으로 200만큼 움직이도록 작성
플레이어가 Cube를 명중시킬 때 마다 플레이어의 위치를 바꿀 것이다.
MoveableCube 블루프린트의 좌측 하단 '내 블루프린트'탭에서 이벤트 디스패처(이름-MovePlayerEvent로 변경)를 추가한다. 이벤트 그래프로 드래그하여 Call 노드를 생성한다. 이벤트 그래프를 우클릭하여 Hit 이벤트를 생성하고, Hit이벤트 - MovePlayerEvent 호출 순서로 연결한다. Cube가 무언가 물체에 닿으면 Hit 이벤트가 발생하고, MovePlayerEvent 디스패처가 실행될 것이다.
레벨 뷰에서 큐브를 선택한 채로 레벨 블루프린트에 가서 MovePlayerEvent를 추가한다. 우클릭하여 Get Player Character를 추가한다. GetPlayerCharacter의 리턴값에서 FirstPersonCharacter에 형변환을 연결한다. MovePlayerEvet와 FirstPersonCharacter를 연결한다.
AsFirstPersonCharacter에 Launch Character 연결, Z를 2000으로 변경하면 Hit 이벤트 발생할 때마다 2000씩 위로 이동. (중력때문에 다시 떨어짐)
AddOffset 함수의 Sweep, Teleport 옵션 https://www.unrealengine.com/ko/blog/moving-physical-objects
매크로/함수/인터페이스/커스텀이벤트/이벤트 디스패처 차이점 http://cafe.naver.com/unrealenginekr/11197
6. Making Procedural Content (Construction Script)
Construction Script로 블루프린트를 열지 않고도 레벨 디테일 창에서 수정이 가능한 블루프린트 만들기. 그리고 절차적 형성 콘텐츠 만들기
SM_MatPrevieMesh 에셋 우클릭 - 에셋 액션 - 다음을 사용하여 블루프린트 생성
이벤트 그래프 : 게임플레이의 런타임에 원하는 기능 실행
Construction Script : 에디터 내에서 변경된 어떤 속성이든 언제든지 발동. 커스터마이징에 편리.
SM_MatPrevieMesh의 메테리얼을 블루프린트에서가 아니라 레벨에서도 수정할 수 있도록 하기 위해 Construction Script에서 변수로 만든다. Material을 변경하는 함수를 만들고 Material을 변수로 승격해야 한다. 변수는 인스턴스 편집 가능에 체크한다. 저장하면 디테일 패널에서 Material의 기본값을 설정할 수 있다. SpotLight를 추가하여 빛의 강도와 색도 바꿀 수 있게 설정한다.
절차적 형성 콘텐츠 만들기 - 범위 내에서 랜덤하게 일정 개수의 Bush를 배치하는 Bush 클래스를 만든다. Actor기반 새 블루프린트 만들고 Bush의 개수를 정하는 변수 생성(편집가능체크). ForLoop로 1부터 Bush 개수만큼 반복문으로 Static Mesh Component추가 함수를 호출한다. Static Mesh Component에 Bush를 지정한다.
Bush가 생성될 위치를 Relative Transform에 연결하여 지정해야 한다. Bush를 새로운 변수 Modifier(편집가능)의 범위 안에 있는 랜덤한 위치에서 생성되도록 한다. Z축은 필요 없으므로 Vector를 분해하여 X와 Y 값만 빼내 결합하여 Vector로 만들고 Transform에 연결한다.
7. Changing Thing over Time (Timeline)
시간에 따라 변하는
액터를 추가하여 컴포넌트로 PointLight, Shape_Wedge_B를 추가하고 치즈 처럼 형상화한다. 컴포넌트로 Rotating Movement를 추가하면 자동으로 회전한다. Z축 값을 변경하여 회전 속도를 조절할 수 있다.
(시뮬레이션 단축키 Alt + s)
액터에 블루프린트를 추가한다. 이벤트 그래프를 우클릭하여 타임라인 이벤트를 추가한다. 타임라인 노드를 더블클릭하면 편집기가 열린다. 타임라인에 트랙과 키프레임을 추가할 수 있다. 함수 모양 버튼을 클릭하여 float 트랙을 추가한다. shift + 좌클릭으로 키프레임을 생성한다.
0 초에0, 1초에 5000, 2초에 0으로 설정한다. 키프레임들을 모두 선택하고 우클릭 - 키보간 자동 클릭. 길이 2, 마지막 키프레임 사용 체크, 자동재생 체크, 루프 체크
벡터 트랙 추가, 0초에 0, 1초에 50, 2초에 0, 보간 자동
이벤트 그래프에서 Point Light의 Set Intensity와 Shape Wedge의 Relative Location과 타임라인 연결
8. Adding Interaction (Line Trace, Interface)
전등을 주시한 채로 Z키를 누르면 전등의 빛을 토글하는 스크립트 작성.
레벨에 Blueprint_CelingLight를 놓고 이벤트 그래프에서 PoingLight의 빛을 Toggle 하는 Custom Event 생성
캐릭터 블루프린트에서 Z키 입력에 대한 함수 작성. Z키 입력 시 LineTraceByChannel 함수 호출. LineTraceByChannel 함수는 시작 위치부터 끝 지점까지 직선상에서 가장 먼저 맞닥드리는 Actor 반환. 시작 위치에 캐릭터 Camera의 Get World Location, 끝 위치에 Get Forward Vector * 5000 + 시작위치 대입. Draw debug Type을 Persistent 로 하면 시뮬레이션 할 때 Line이 보인다.
B를 누르고 이벤트 그래프 클릭하면 브랜치 생성(if문). 무언가와 닿았는지가 True일 경우 Out Hit의 Hit Actor를 전등으로 형변환한다. 변환이 성공하면 전등의 Custom Event를 호출한다.
블루프린트 인터페이스 - 여러 액터들을 각자 주시한 채로 Z키를 누르면 서로 다른 행동을 보이도록 만든다.
레벨에 여러 액터 클래스를 배치한다. 블루프린트 인터페이스를 생성하고, Looking At 함수를 만든다. Player 블루프린트에서 Line Trace Channel의 반환이 True일 경우 Looking At 함수를 호출한다. 각 액터 클래스에서 Looking At 이벤트 발생에 대한 스크립트를 각자 작성한다. 이를 위해 Player와 각 액터 클래스는 클래스 세팅에서 인터페이스를 등록해야한다.
오버로딩/오버라이딩/추상클래스/인터페이스 개념 http://moguwai.tistory.com/entry/
오버로딩과 오버라이딩 차이와 예제 http://private.tistory.com/25
9. More Blueprint Communications
레벨에 하나의 Sphere와 여러개의 큐브를 배치하고, Sphere에 플레이어가 오버랩되면 큐브들이 z축으로 50만큼 위로 이동
Shape_Sphere와 Shape_Cube를 클래스로 만들고 레벨에 배치. Shape_Cupe 블루프린트에 대해 Move UP 커스텀 이벤트를 생성하고 이벤트 발생할 때 마다 Z축으로 50 위로 이동하도록 작성
Shape_Sphere 블루프린트에서 Static Mesh를 선택하고, Component Begin Overlap 이벤트 작성. 모든 Shape Cube 클래스의 액터에 대해 For Loop로 Move UP 이벤트 실행
* 하나의 큐브만 실행하고 싶으면, Shape_Sphere 클래스에서 변수를 하나 만들고, 변수 형태를 Shape_Cube로 지정한다. 그리고 Shape_Sphere 의 디테일 패널에서 변수의 기본값을 실행하고 싶은 큐브로 지정한다.
10. Adding 3D Widgets
블루프린트의 변수를 뷰 포트에 표시하여 3D Widget으로 변경할 수 있다.
공백엑터에 Scene과 Static Mesh 추가하여 큐브 블루프린트 만듦. 높이를 변경할 변수 Sizer 만들고 3D위젯표시 체크
*Scene을 추가하면 액터의 트랜스폼을 변경할 수 있다.
11. Expose on Spawn
액터를 생성할 때 액터의 변수를 바꿀 수 있다. x를 누르면 액터를 생성하고, 생성할 때 액터의 Material을 결정하는 스크립트를 작성한다.
빈 엑터에 Scene과 static mesh를 추가, mesh를 shape_sphere로 설정하고 블루프린트를 추가한다.
블루프린트에서 Material형 변수'material'을 생성하고 construction script에서 set Material함수를 호출헤 'material'변수를 연결한다.
'material'변수의 디테일에서 인스턴스 편집 가능과 스폰시 노출을 체크한다.
레벨에 Target point를 배치하고 레벨 블루프린트에서 X키 입력시 Target point에 Actor를 호출하는 스크립트를 작성한다.
12. Random Streams
지정된 범위 내의 랜덤한 위치에서 액터를 생성한다. Random Stream을 이용하여 처음 한번만 생성하도록 설정한다.
빈 액터를 만들고 블루프린트에서 Integer형 변수 'NumberOfBushes'와 Random Stream형 변수 'stream'을 생성한다. For loop문으로 NumberOfBushes수 만큼 액터에 Static Mesh Component를 추가한다.
Blueprint Quickshot | v4.7 | Unreal Engine https://www.youtube.com/playlist?list=PLZlv_N0_O1gZg3dTMetmsfm_s4lb4-Tg0
'공부 > 게임' 카테고리의 다른 글
오버워치 훈련장 구현 1 (0) | 2017.11.29 |
---|---|
오버워치 훈련장 구현 0 (0) | 2017.11.29 |
언리얼 엔진4 튜토리얼 - Intro to Blueprints (0) | 2017.11.21 |
언리얼엔진4 튜토리얼 - BP 3d Person Game (0) | 2017.11.13 |
언리얼 엔진4 튜토리얼 - Intro to Level Creation (0) | 2017.11.10 |