Unreal Engine/게임클래스 - 언리얼엔진 기초

[11강] 객체 찾기와 반복문

whereareyoung 2023. 7. 25. 15:33

객체화 복습

1. 작업중인 "BP_04_Trigger_Light" 를 화면에서 3개 복제한다.

* 복사 단축 키 : Alt + drag

2. "BP_04_Trigger_Light" 블루프린트 변수에 "Light Color", Linear Color 변수를 추가한다.

* Color 자료형 : 0~255, 빨간색이면 255, 0, 0 이런식으로 정의 

* Linear Color : 0~1, 빨간색이면 1, 0, 0 이런식으로 정의 

Linear Color 형이 비율을 맞추기가 더 쉬워서 라이트라던지 대부분의 컬러의 변수로 사용됨

3. 컴파일 후 빨간색(1, 0, 0) 지정  

4. 만들어 둔 Light Color 변수를 가져오고, "Set Light Color" 함수를 불러와 다음과 같이 이벤트 함수 업데이트 

* "SRGB"는 "표준 RGB" 를 지칭함 

5. 만들어진 변수를 활성화하고 컴파일 후 확인하여 보면 Light Color를 작업하면서 체크할 수 있다. 

6. 각각의 "BP_04_Trigger_Light" 객체에 기본(Red), Green, Blue 설정을 하면 "객체" 의 특성 덕분에 다음과 같이 쉽게 적용이 가능하다. 

 

화면에 배치된 객체를 배열로 리턴받아서 반복문으로 돌리기

Line Trace를 하는 오브젝트를 생성, 플레이어에게 라인을 쏜 후 충돌(Overlap)을 추적 

선이 어디에 그어질지 마킹하는 객체 생성 

1. 객체생성

생성 > 블루프린트 클래스 > 액터 > BP_05_DrawLine > 컴포넌트 추가 > Sphere > (블루프린트 내부에서) Scale(0.25, 0.25, 0.25)

2. 생성한 "BP_05_DrawLine" 객체를 2개 복사해서 화면에 다음과 같이 배치

(Transform z 150 정도로 설정)

3. 생성 > 블루프린트 클래스 > 액터 > BP_05_LineTrace

방금 올렸던 두 객체를 찾아와 두 객체 사이에 Line 을 그릴 블루프린트 생성 

4. "BP_05_LineTrace" 블루프린트의 "Begin Play" 이벤트 생성, "Get All Actors Of Class" 함수를 생성해 연결하고 "BP_05_Draw_Line" 자료형 입력 

* Get All Actors Of Class : 배치되어 있는 액터 중 해당 자료형으로 만들어진 객체를 찾아 줌

* Out Actors 를 통해 찾은 액터를 입력한 자료형으로 바꾸어 출력해줌 

 

5. "Lines" 변수 생성 및 오브젝트 타입을 다음과 같이 설정 

(BP_05_DrawLine > 오브젝트 레퍼런스)

6. "Lines" 변수의 오브젝트 타입을 단일(파랑박스)에서 배열(빨강박스) 으로 변경

* 배열 : 같은 변수의 타입이라면 여러개를 묶어서 하나의 변수로 묶어 관리하는 타입 

(Actor Class 입력한 것에 여러가지가 들어왔을 수 있는데 배열로 처리하여 주는게 용이하기 때문이다.)

 

7. "Get All Actors Of Class" 의 실행노드를 연결해 "Set Lines" 를 다음과 같이 연결해주어 Actor Class 받은 것들을 "Lines" 배열에 입력해주기 

8. "For Each Loop" 함수 생성 및 연결 

Actor Class입력받은것들이 "Lines" 배열에 잘 들어있는지 확인하기 위해 반복문을 사용하여 출력

배열 하나가 입력될 경우, Loop Body에서 배열 하나가 출력되며 Array Index 에서는 그 배열의 번호가 출력됨 

* 지금 상태에서는 배열이 2개가 입력되기 때문에 Loop Body 에서 2번 빠져나가고 Completed가 출력이 됨 

 

For Each Loop 함수 

1) Loop Body : 갯수만큼 각각 한번 씩 실행됨 

2) Array Element : 한번 실행될 때 마다 순서대로 하나씩 리턴 

3) Array Index : 해당 엘리먼트 번호를 리턴 

4) Complete : 모두 다 실행된 후 나갈 실행 핀 

 

9. 출력 

1) Print String 함수 생성 

2) Get Display Name 함수 생성 

3) Append 함수 생성

Append 함수 : 숫자를 문자열로 변경해서 나타나게 함

* A연결 > B에 " / " 입력 > 핀추가 > C연결 

4) "Finised" Print String 연결 

반복문이 마무리 되었을 경우"Finished" 출력

5) "Print String" Duration 각각 20으로 설정 

6) 컴포넌트 추가 > 텍스트렌더러 > 다음과 같이 설정 

7) 위치가 중요한 Actor 는 아니기 때문에 화면 아무데나 배치해준다. 

8) 게임모드에서 입력받은 Actor들을 생성한 변수에 넣고 반복문을 통해 0번 인덱스 1번인덱스가 출력되는 것을 확인할 수 있다. 

9) 출력이 잘 된다는 것을 확인했으니 "Set" 이하로의 입력을 끊어주고 원래 하던 작업을 속행한다. 

 

10. Get Debug Line 생성 및 연결 > Get "Lines" > Get 사본 생성 > GetActorLocation > Debug 라인과 연결

위에가 인덱스 0, 밑에가 인덱스 1 

 

11. Line Color 에 red 입력 > Duration 10.0 입력 

12. 게임모드에서 확인 

게임모드에서 플레이를 통해 Actor 배치 된 자리 사이에서 세팅한 기간 (Duration : 10.0) 동안 라인이 유지되는 것을 확인 할 수 있다. 

하지만 선이 시작되는 위치에 의해 그려졌기 때문에 후에 Actor가 움직여도 그려진 선이 움직이지 않는다는 문제가 있다. 

* 이벤트 함수 Begin Play에서 선을 그렸기 때문에 처음에 한번만 그려진다. Thick 에서는 선을 계속 매 프레임마다 그리기 때문에 선이 실시간으로 적용된다. 

 

13. Tick 이벤트 함수 생성 및 연결 

Tick 이벤트 함수에서는 실시간으로 갱신이 되기 때문에 Duration이 의미가 없다. 값을 0.0으로 바꾸어준다. 

14. F8로 빙의를 해제하고, Actor를 움직여본다.

다음과 같이 Line Tracer이 자동으로 갱신되는 것을 확인할 수 있다. 

 

15. 추후에 있을 디버깅 작업을 편하게 하기 위해서 컬러를 블루로 바꾸어주고 "DrawLine" 함수생성 및 다음과 같이 연결하여준다. 

Custom Event - 되돌려주는 값이 없음, 위의 경우 되돌려줄 값이 없기 때문에 Custom Event 로 처리했어도 괜찮음 

1) DrawLine에 입력값을 넣어주기 위해 "Duration" 을 Float 자료형으로 만들어 준다. 

2) 다음과 같이 연결한다 

3) 만들어진 함수를 다음과 같이 호출하여 사용할 수 있다. 

- Begin Event 함수라 처음 입력받은 자리에 그려지는 버전)

- Tick Event 함수라 실시간으로 갱신되어 그려지는 버전 (Duration 값 상관없음)

F8로 빙의 풀고 체크 해보면 정상적으로 갱신되는 것을 확인 할 수 있다. 

 

 

다음시간에 Line Tracer, sweep 등에 대해 다룰 예정이다. 

원리는 같지만 코드가 블루프린트로 구현되는 과정이 흥미로웠던 시간이였다. 

 

'Unreal Engine > 게임클래스 - 언리얼엔진 기초' 카테고리의 다른 글

[13강] Asset Migration  (0) 2023.08.17
[12강] Line Trace와 Material  (0) 2023.08.16
[10강] Collision (Overlap / Hit)  (0) 2023.07.24
[9강] Collision  (0) 2023.07.19
[8강] State Machine  (0) 2023.07.19