3일 차 강의에 블루프린트 스크립팅 내용을 배워 관련 내용을 추가하고 과제 4개를 정리해 보았습니다.
블루프린트 노드의 구조와 제어 흐름
블루프린트 노드는 크게 실행 핀, 입력 핀, 출력 핀의 세 가지 핀으로 구성되어 있습니다. 노드의 흐름 제어 방향은 왼쪽에서 오른쪽으로 진행됩니다. 실행 제어와 마찬가지로 데이터의 흐름 제어 역시 좌에서 우로 연결됩니다.
데이터의 그릇, 변수(Variable)
프로그래밍에서는 입력 값, 결괏값 등과 같은 수많은 데이터를 처리하고 있고, 그 각각의 데이터들은 저마다 담아 놓을 수 있는 그릇에 담겨 있습니다. 이 그릇을 ‘변수(Variable)’라고 합니다. 변수를 만들 때마다 담을 수 있는 데이터의 종류를 결정해 주는데 이러한 용도 지정을 ‘자료형(Data Type)’이라고 부릅니다.
원하는 동작을 하는 노드, 함수(Function)
함수(Function)란 주스 착즙기처럼 투입구에 입력 값(input)을 넣고 실행하면 배출구에서 출력 값(output)이 나오는 기능을 하는 노드를 말합니다.
클래스란 무엇인가?
프로그래밍에서 클래스란 특정한 속성과 기능들로 구성된 ‘추상적인’ 형식을 의미합니다. 결국, 추상적인 클래스의 속성 값을 어떻게 설정하는지에 따라 여러 가지 ‘구체적인’ 인스턴스 객체로 파생된다고 볼 수 있습니다.
Dog라는 이름의 블루프린트 클래스를 만든다고 가정하겠습니다. 나이, 털의 무늬 등의 속성 값을 설정할 수 있는 변수 노드들, 앉거나 달리는 동작을 구현한 함수 노드들을 만들어도 이 상태만으로는 아직 구체적인 어떤 강아지라고 할 수 없습니다. 실제로 Dog 블루프린트를 레벨에 배치(인스턴스를 생성), 변수에 적절한 값을 입력하고 텍스처나 애니메이션 파일 같은 리소스를 추가할 때에서야 비로소 사용자가 보고 느낄 수 있는 구체적인 강아지가 될 수 있는 것입니다.
클래스는 크게 속성과 기능으로 구성되어 있습니다. 속성은 변수들로 이루어진 데이터를 말하고 기능이란 함수로 구성된 일련의 동작 프로세스들을 의미합니다. 구분하기 쉬운 방법은 명사 형태를 가지고 있는 것을 ‘속성, 변수’라고 보고, 동사 형태를 가지고 있는 것을 ‘기능, 함수’라고 생각하는 것입니다.
객체지향 프로그래밍
과거의 절차적 프로그래밍은 모든 코드를 발생 시점으로부터 종료 시점까지의 시간 순서에 따라 절차적으로 필요한 기능을 구현해 나갔습니다. 그러다보니 다른 스크립트에서 같은 내용을 다시 사용할 때에도 매번 같은 내용을 다시 작성해야 한다는 불편함이 발생했습니다.
그래서 기능과 속성을 묶어 하나의 추상적인 틀(Class)로 구현한 다음, 이 틀에서 필요할 때마다 객체(Object)를 만들어서 유연하게 관리하는 프로그래밍 방식으로 설계하는 객체지향 프로그래밍이 현재는 대세를 이루고 있습니다.
객체지향에는 추상성, 상속성, 캡슐화, 다형성이라는 특징이 있습니다.
- 추상성 : 여러 가지 객체들로부터 공통적인 속성과 기능을 묶어서 클래스로 만드는 특징
- 상속성 : 기존에 존재하는 클래스의 기능이나 속성을 다른 클래스가 그대로 물려받도록 하는 특징
- 캡슐화 : 특정한 목적을 수행하기 위해 속성과 기능을 하나로 묶어놓는 것. 주로 속성 요소를 외부에서 함부로 접근할 수 없게 금지하고, 특정한 함수를 통해서만 생성 또는 변경이 가능하게 해야 할 경우에 캡슐화를 사용합니다.
- 다형성 : 하나의 객체를 다양한 형태의 객체로 변화시킬 수 있는 특징. 대표적으로 부모 클래스로부터 물려받은 함수의 구현 내용을 자식 클래스에서 덮어쓰기(Overriding)로 변경해서 같은 이름의 함수라도 클래스에 따라 다른 동작을 하게 한다든가, 같은 이름의 함수를 매개변수를 달리하여 여러 가지 형태로 제작(Overloading)된 동명의 함수를 사용하게 하는 방법이 있습니다.
언리얼 엔진의 라이프 사이클 함수
사람이 태어나서 살다가 죽는, 생애에 대한 일련의 과정을 ‘생애 주기(Life cycle)’라고 부릅니다. 프로그래밍 엔진에서도 객체를 생성하면 생성된 객체마다의 생애 주기에 따라 특정 이벤트 함수를 호출합니다.
- [Event Begin Play] 함수 노드 : 객체가 최초로 생성이 되었을 때 1회 호출되는 함수
- [Event Tick] 함수 노드 : 객체가 파괴되지 않고 유지되는 동안 1프레임마다 반복해서 호출되는 함수
- [Event Destroyed] 함수 노드 : 객체가 파괴되기 직전에 호출되는 함수
Tick 함수는 프레임(Frame)마다 실행된다고 했는데 여기서 프레임이란 컴퓨터가 전체 코드를 한차례 실행하는 데 걸린 시간 간격을 의미합니다.
블루프린트를 이용한 비주얼 스크립팅 과제
과제 1 : 텍스트 슈팅 게임 버그 고치기
1) 총알 발사 버그 - 30발 이상 총알을 발사하려고 하는 경우, 발사가 불가능하도록
2) 총알 재장전 버그 - 총알이 가득차 있는 경우, 재장전이 불가능하도록
과제 2 : 텍스트 슈팅 게임 기능 추가하기
1) 총알 피격 기능 - HP와 DAMAGE라는 노드를 생성해 총알을 맞으면 피해를 입는 기능 추가
2) 체력 회복 기능 - HEAL이라는 노드를 생성해 총알 피격으로 입은 피해를 치료하는 기능 추가
과제 3 : While Loop를 이용해 구구단 구현하기
과제 4 : 열거형을 이용해 가위바위보 구현하기
가위바위보 문제에서 구현해야 하는 알고리즘은 다음과 같습니다.
- 열거형으로 가위, 바위, 보를 지정한다.
- 플레이어의 값은 키보드 입력으로 결정한다
- 컴퓨터의 값은 랜덤 함수로 결정한다.
- 플레이어의 승/무/패 결과를 출력한다.
플레이어 값은 키보드 1, 2, 3 입력에 따라 PlayerChoice를 설정합니다. 컴퓨터 값은 Random Integer 노드를 사용해 0~2 사이의 랜덤 값을 생성해 결정합니다.
승/무/패 판정은 Switch on Enum을 활용해 조건을 검사합니다.
결과 출력은 Format Text를 사용해 결과를 출력합니다.
잘 출력하는 것을 볼 수 있습니다.
출처 : 인생 언리얼 5 프로젝트 교과서
'내일배움캠프 > TIL' 카테고리의 다른 글
[내일배움캠프 Day5] 콜리전 수정하기 (2) | 2024.12.20 |
---|---|
[내일배움캠프 Day4] 플레이어 이동하기 (2) | 2024.12.19 |
[내일배움캠프 Day2] 언리얼 엔진 머티리얼(Material) (2) | 2024.12.17 |
[내일배움캠프 Day1] 언리얼 엔진 에디터의 화면 구성 (0) | 2024.12.16 |
[사전 캠프 Day9] 팀 프로젝트 진행 (0) | 2024.12.12 |