언리얼 엔진 시작하기 6

2017. 1. 2. 16:17기술/언리얼 스터디

반응형

아주 간단한 블루 프린트 퀵 스타트 가이드를 우선 진행해 보겠습니다.

일단 공백 액터를 하나 만들어 줍니다. ( 유니티의 게임 오브젝트 개념이라고 생각하면 쉬울것 같습니다. )

큐브와 충돌박스를 추가해 주고 크기조절을 합니다.

좌측은 원래 있던 액터이고 우측 그림이 큐브를 추가해 주었을 때 그림입니다. Root에 큐브가 하나 추가된 것을 볼 수 있습니다. 이 액터에 블루 프린트를 추가합니다. 이벤트 그래프 탭에서 블루 프린트를 작성합니다.

On Component Begin Overlap

Event called when something starts to overlaps this component, for example a player walking into a trigger. For events when objects have a blocking collision, for example a player hitting a wall, see 'Hit' events.

will be adjusted to indicate force from the other object against this object.


어떤것이 이 컴포넌트 위에 다다랐을 때 호출됩니다. 예를 들어 플레이어가 걷다가 이 트리거 안으로 들어왔을 때.

Pawn은 액터의 자식 클래스 이며 Character의 상위 클래스 입니다. Get Player Pawn을 하면 가져올 수 있습니다.

Other Actor에 ==으로 같은지 여부를 만들어 내고 Pawn을 아래쪽에 연결시켜 줍니다.

분기는 if문 입니다. bool 값으로 같은지 여부를 연결 시켜 주고 실행핀을 연결합니다. 분기에서 충돌한 객체가 플레이어 Pawn이라면 Launch Character를 해 줍니다.


Launch Character

Set a pending launch velocity on the Character. This velocity will be processed on the next CharacterMovementComponent tick, and will set it to the "falling" state. Triggers the OnLaunched event.

Target is Character


Launch Character는 Character 클래스의 기능이므로 형변환을 해준다음 호출해 주어야 합니다.


다음으로 만들어진 액터_블루프린트를 여러곳에 설치할 수 있습니다.

( 유니티의 게임오브젝트와 비슷한 개념인데 코드를 C# 스크립트로 작성하는 것이 아니라 블루 프린트로 작성한다고 생각하면 쉽습니다. )


여기까지 기본적인 빈액터 만들기, 큐브 모델 추가, 충돌박스 추가, 블루 프린트 추가, OnComponentBeginOverlap, Get Player Pawn, 분기, 캐스팅, Launch Player에 대해서 알아 보았습니다.


다음으로 기본 스크립팅 > 액터 래퍼런스 Set/Get에 대한 예제를 실습해 보겠습니다.



맵 상에 박스 트리거를 하나 설치하고 블루 프린트를 추가해 줍니다. 다음으로 맵 상에 일반 박스 3개를 설치하고 무버블 설정을 해 줍니다. 그리고 박스 트리거 블루 프린트에서 위와같이 Actor 변수를 하나 추가합니다.

OnComponentBeginOverlap 이벤트가 발생했을 때, 액터의 로컬위치를 더해 줍니다. ( AddActorLocalOffset 함수 입니다. )

그다음 타겟으로 TargetActor 변수를 Get 해서 설정해 주면 그 변수에 설정된 박스가 움직입니다.

그리고 실험삼아 AddActorLocalRotation도 해 주었습니다. 위쪽방향이 Z축입니다. 위와같이 해주면 위로 10cm이동 다음 바로 Z축으로 15도 회전을 합니다.

이제 간단한 HP 변수를 만들어 주고 초기값으로 100을 주었습니다. 변수 편집 가능에 체크를 해주고 HP를 끌어다가 - 5를 시켜 주었습니다. 그런데 이 변수값을 확인해 보려고 하니 실행핀 연결이 되지 않았습니다.

고민하다가 Print Text 라는 함수를 발견했습니다. 여기에 연결해 주면 100 - 5 = 95가 출력이 됩니다. 누적된 값이 출력되지 않아서 결과값을 다시 HP 변수에 넣어야겠다고 생각하고 변수를 한 번 더 끌어왔습니다. ( Set ) 그러니 실행핀이 생기고 연결해 주니 95, 90, ... 이렇게 화면에 출력이 됩니다. 추후 이 값은 서버에서 가져오고 Print Text 부분을 UI로 표현해 주면 캐릭터의 HP값을 보여줄 수 있습니다.


여기까지 블루프린트의 변수에 대해서 간단하게 알아보았습니다. 블루 프린트 함수에 대해서 천천히 살펴보면 하나씩 보입니다.


블루 프린트 형변환을 실습해 보겠습니다.


우리 캐릭터는 ThirdPersonCharacter 입니다. 이 블루프린트를 열어서 Tick 이벤트를 추가해 줍니다.


좌측 변수 부분에 Bool로 IsOnFire 변수를 추가해 주고 Tick 이벤트에 분기문을 만들고 IsOnFire가 True 일 때, 문자열을 출력해 줍니다. 그럼 IsOnFire가 True가 되어야 하겠죠? 이는 캐릭터가 모닥불에 들어갔을 때, True가 되고 빠져 나왔을 때 False가 됩니다.



Blueprint_Effect_Fire를 맵상에 놓습니다. 우측 디테일 창에서 컴포넌트 추가 > Collision > Sphere Collision을 추가하고 이름을 Trigger라고 지어줍니다. 그다음 인스턴스 변경사항을 블루프린트에 적용 시켜야 변수로 보입니다.



Blueprint_Effect_Fire 블루 프린트 입니다. 컴포넌트의 Trigger에 우클릭하여 OnComponentBeginOverlap과 End 트리거를 추가해 줍니다. 그다음 Other Actor를 끌어다가 ThirdPersonCharacter 형변환을 시켜줍니다. IsOnFire가 ThirdPersonCharacter의 변수이므로 그렇게 형변환 시켜주는 것입니다. 그럼 그 변수에 접근해서 Set 할 수 있습니다.


간단하게 그림으로 표현하자면 다음과 같습니다.


그리고 형변환은 UML 클래스 다이어그램을 참고하면 좋을거 같습니다.


블루프린트 형변환 예제를 실습해 보겠습니다.


오브젝트의 크기를 줄이는 방법

맵상에 아무 박스나 클릭해서 블루프린트를 추가해 줍니다. LargeCube_Blueprint

Collision > Hit 이벤트가 있습니다. Other 부분을 끌어다가 LargeCube_Blueprint로 Cast해 줍니다. LargeCube_Blueprint의 변수에 접근하기 위해서 입니다. Set World Scale 3D 함수는 메쉬의 크기를 변환해 주는 함수 입니다. LargeCube_Blueprint에서 Static Mesh Component->Get World Scale에 0.9를 곱한다음 Set World Scale 3D의 New Value에 연결시켜 줍니다.


이렇게 하면 Hit된 박스의 크기가 0.9씩 줄어듭니다.


캐릭터의 Max Speed를 조절하는 방법

Get Player Character -> Cast MyCharacter -> 변수에 Get CharacterMovement를 하고 Get Max Speed를 한다음 200씩 더해주고 CharacterMovement에서 Set Max Speed를 해주면 됩니다.


이 때, 캐스팅에 실패하면 바로 DestroyActor 해줍니다. 그러면 바로 이 총탄 블루프린트가 파괴됩니다.


이 형변환 예제에서는 Hit 이벤트, Set World Scale 3D 함수, CharacterMovement, GetMaxSpeed, DestroyActor에 대해 알아 보았습니다.


블루 프린트 변수, 노드, 노드 연결하기는 그냥 읽어보면 될거 같습니다.


이벤트 실습

레벨 관련된건 현재 모르니 패스,


ActorBeginOverlap 이벤트는 OnComponentBeginOverlap 과 무엇이 다른지 모르겠습니다. 충돌박스 충돌시 이벤트가 발생합니다. 위의 내용을 알고 있더라고 계속 반복하는 이유는 더욱 익숙해지기 위함이며 익숙해 지다 보면 분석력도 올라가게 됩니다.


Spawn Emitter at Location 이펙트를 생성 시킵니다.

IsFirst 변수를 하나 만들고 초기값을 True로 해준다음 분기문을 만들어서 첫번째 충돌시에만 이펙트를 생성(Spawn) 하게끔 해 주었습니다.



Event Any Damage는 서버에서만 실행된다는데 서버가 아니라 그런지 시도해 보면 메시지가 실행되지 않습니다. 이 이벤트들은 일단은 넘어가겠습니다.


도중에 엔진이 약간 느리고 자주 뻗는 이유를 알아낸거 같습니다. 바로 그래픽 퀄리티 때문에 그런거 같습니다. 엔진 퀄리티 세팅에 가서 자동으로 설정해 줍니다.


Actor Begin Cursor Over 이벤트는 해당 물체에 마우스 커서가 올라가면 한 번 발생하는 이벤트 입니다.

Set Actor Hide In Game 함수는 해당 물체를 숨기는 이벤트입니다. (파괴되지 않아서 존재는 하지만 보이지 않는)

Event Begin Play는 게임이 시작되면 모든 액터에서 실행되는 이벤트로 주로 변수들을 설정하는데에 써도 좋을거 같습니다.


도중에 재질에 관련하여 알아보다가 다음과 같은 방법을 알아냈습니다. 바로바로 적용되는군요~


플로우컨트롤 실습

위에 총쏘는 프로젝트에서 피격박스 블루프린트를 열고 다음과 같이 해주면서 Custom Event와 Switch 실습을 해 보겠습니다.

피격박스에 커스텀 이벤트를 추가하고 이 이벤트를 호출했을 때 HittedCount Int형 변수를 1씩 추가합니다. Switch Int문을 달아서 HittedCount가 3일 때, HittedCount 변수를 0으로 Set 합니다. 그럼 화면에 0, 1, 2, 0, 1, 2로 반복 출력됩니다.


Do N을 연습해본 블루프린트 입니다. Do N은 딱 몇번만 실행하라 입니다. N이 2 이므로 딱 2번만 실행되고 그 이후로는 실행되지 않습니다. 한번 Hitted 될 때마다 Do N이 한번 실행되어 HP가 5가 올라가는데 두번 올라가서 10 올라간 후로는 올라가지 않습니다. 하지만 HittedCount를 0으로 초기화 할 때, Do N도 Reset 해주고 있으므로 다시 2번 실행이 됩니다. 그러므로 3번 히트될 때 2번씩 실행되는 코드입니다.


DoOnce는 딱 한번만 실행되는 노드인데 Tick 이벤트에서 딱 한번만 실행해야 할 때 사용하면 좋을거 같습니다.

시퀀스는 핀을 동시에 여러개 실행시켜주고 싶을 때 사용하면 됩니다.


for문 루프도 있고 while루프도 있습니다. 그중 while 루프를 실습해 보겠습니다.

Bool형 IsLoopEnd 변수를 만들어 주어야 합니다. 그리고 while문 숫자 증가값을 위해서 Int형 iterator 변수를 만들어 줍니다. 초기값으로 IsLoopEnd = true, Iterator = 0을 설정하고 Whileloop를 돌립니다. 내용은 Print String이며 한번씩 출력할 때마다 Iterator값이 1씩 증가합니다. 그리고 문자열 합치기를 위해서 String형 Message 변수를 만들었습니다. 값은 "This number is " 입니다. Append 함수를 사용해서 문자열을 합칩니다. This number is 0이 출력될 것입니다. Iterator 값이 5보다 커지면 IsLoopEnd값이 false가 되어서 WhileLoop에서 빠져나오게 됩니다.


완성된 그림이 조금 복잡해 보이지만 실제로 하나씩 만들어가면 그다지 복잡하지 않습니다.


배열 작업 실습

타겟 포인트를 4개 두고

해당 타겟포인트 4개를 선택후 레벨 플루프린트를 연 다음 배열을 만들어 줍니다.

Actor 변수를 하나 만들고 배열 아이콘을 클릭해서 배열로 만들어 줍니다. Actor 변수를 만들 때, 잘 보면 Actor > 클래스라고 있습니다.

배열에서 Random한 값을 가져오는 방법입니다. 스폰 액터는 맵상에 액터르 생성시켜주는 함수 입니다.


이 부분에서는 레벨 블루 프린트 열기, 배열 만들기, 배열에서 무작위 값 가져오기, GetActorTransform, 스폰 액터등에 대해서 알아 보았습니다.


여기까지 언리얼 엔진 시작하기 6에서는 블루프린트 비주얼 스크립팅 > 기본 스크립팅의 다양한 예제를 실습해 보았습니다. 블루 프린트의 기초에 대해서 조금 익힐 수 있었습니다.

 










반응형

'기술 > 언리얼 스터디' 카테고리의 다른 글

언리얼 엔진 시작하기 8  (0) 2017.01.24
언리얼 엔진 시작하기 7  (0) 2017.01.04
언리얼 엔진 시작하기 5  (0) 2016.12.30
언리얼 엔진 시작하기 4  (0) 2016.12.12
언리얼 엔진 시작하기 3  (0) 2016.12.03