객체화 복습
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 |