언리얼엔진/블루프린트

블루프린트의 개념과 언리얼의 C++

season97 2023. 10. 7. 23:25

▶ 블루프린트란?

블루프린트 예시 사진

ㆍ 블루프린트란 '비주얼 스크립팅' 이라고 불리는 노드 기반 스크립팅 시스템을 말한다.

 

ㆍ 비주얼 스크립팅이란 말 그대로 '비주얼 스크립팅'

 - 코드로 하는 작업을 노드라는 작업으로 연결 시켜주는 것을 의미한다.

※ 코드를 작성하는 대신 그래픽 인터페이스를 통해 프로그래밍을 한다.

※ 시각적인 그래프 기반 시스템으로, 게임플레이 메카닉과 인터렉션 로직을 구축할 수 있다

 

ㆍ 프로그래밍 언어에 익숙하지 않은 사람들도 블루프린트를 통해 게임 플레이 메카닉을 만들고, 인터페이스를 설계하며 상호작용 로직까지도 구현할 수 있다.

 

ㆍ 설계단계및 모듈화에서도 높은 효율을 자랑한다.

 

 

▶ 블루프린트의 종류

 

1. 레벨 블루프린트

 

ㆍ 각 레벨에서 특정 이벤트와 상호작용을 처리하기 위해 사용된다. 

 

ㆍ 예시로 특정 조건이 충족되면 다음스테이지로 가는 문이 열림과 같은 로직

 

2. 클래스 블루프린트

 

ㆍ 게임오브젝트나 엑터에 대한 동작과 상호작용을 정의

 

ㆍ 클래스 블루프린트는 캐릭터, 아이템, 환경요소 등 게임에 필요한 거의 모든것에 대한 로직을 구현할 수 있다.

 

ㆍ 컴포넌트 기반이라고 생각하면 좋으며 다른 타입의 엑터처럼 동작하는 인스턴스 형태로 맵에 배치가 가능하다.

 

3. 애니메이션 블루프린트

 

ㆍ 캐릭터나 다른 3D모델들의 애니메이션 상태 전환을 관리한다.

 

예를들어 캐릭터가 걷기상태에서 달리기 상태로 전환되는 로직을 작성

 

※ 크게 위 3가지를 중점으로 기억하자. 

 

4. 인터페이스 블루프린트

 

ㆍ 여러 개체 간에 공유될 수 있는 기능 집합을 정의할 수 있다.

 

5. 데이터 블루프린트

 

ㆍ 데이터만 포함하는 특별한 종류의 클래스. 

 

ㆍ예를들어 캐릭터의 스탯, 아이템의 정보

 

6. 매크로 라이브러리

 

재사용 가능한 코드 조각들 즉 매크로를 저장하는곳

 

※ 느낀점: "결국 블루프린트도 c++로 구성되어있구나" 를 느꼈습니다.

 

 

 

 

 

▶ 컴포넌트 프로그래밍이란?

 

ㆍ 상속 기반 프로그래밍에서의 단점을 극복하기 위해 나온 방식으로 물체를 1개 이상 정의하고 그 물체의 기능을 확장해 나가는 식으로 코드를 작성하는 개념을 말한다.

 

ㆍ 즉 재사용 가능한 '컴포넌트' 라는 독립적인 모듈들을 조합하여 소프트웨어를 구축하는 방식

 

ㆍ 이러한 컴포넌트들은 각각 특정 기능을 수행하며 상호작용을 위해 잘 정의된 인터페이스를 가지고 있다.

컴포넌트 프로그래밍 예시

덕 타이핑 개념으로 이해하자

 

※ 덕 타이핑?


ㆍ 동적 타이핑의 한 종류

 

ㆍ 객체의 변수 및 메서드의 집합이 객체의 타입을 결정한다.

※ 유래) 만약 그것이 오리처럼 걷고 오리처럼 꽥꽥거린다면 그것은 오리다.

 

ㆍ 객체의 타입 또는 클래스보다는 객체가 어떤 메서드나 속성을 지원하는지가 중요하다. 

 

- 장점

 

컴포넌트 기반이므로 커드의 재사용성과 유지보수성이 향상된다.

 

ㆍ 시스템의 다른 부분과 독립적으로 개별 컴포넌트를 업데이트 하거나 수정할 수 있다.

※ 유지보수가 좋겠군

 

ㆍ 설계단계가 비교적 수월하다.

 

- 단점

 

여러 컴포넌트를 연결하는 로직이 필요하며 이는 즉 퍼포먼스 저하로 이어질 수 있다.

 

ㆍ 너무 많은 컴포넌트와 그 사이에 복잡한 상호작용으로 인해 시스템 전체가 복잡해질 여지가 있다.

 

 

▶ 언리얼 엔진에서의 컴포넌트 기반 프로그래밍

 

컴포넌트 기반으로 각각 다른 기능을 수행한다.

게임 객체(Actor)

 

언리얼 엔진에선 Actor라는 개념이 게임 세계에 배치될 수 있는 모든 객체를 말한다.

 

- Actor는 여러 컴포넌트로 구성되며 이들 컴포넌트가 Actor의 동작과 속성을 정의한다.

Actor의 컴포넌트들

 

ㆍ 커스텀 스크립트 컴포넌트

 

개발자들은 자신만의 커스텀 스크립트 컴포넌트를 생성하여 Actor에 추가할 수 있다. 

 

- 이렇게 만든 커스텀 스크립트는 Engine, EngineCore, CoreMinimal 클래스중 하나를 상속받아야 한다.

 

 

 

 

▶ C++과 블루프린트의 차이점

 

1. 속도

 

 C++는 컴파일된 언어로 코드가 직접 기계코드로 변환되어 실행된다. 

 

ㆍ 블루프린트보다 훨씬 빠르다.

 

ㆍ 성능에 민감한 작업( 복잡한 계산, 대량 데이터 처리 등) 은 C++에서 처리하는게 좋을 것 같다.

 

※ 느낀점: 모두 장단점이 있는거같다. 프로토타입 작성은 블루프린트를 활용하고

성능에 민감한부분을 c++로 처리하면 좋을 것 같다.

 

 

▶ 일반 C++과 언리얼 엔진 프레임워크 C++의 차이점

 

1. 간소화된 문법

 

ㆍ 언리얼 엔진의 C++ 프레인워크는 게임 개발에 특화된 메크로와 함수들을 제공해 복잡한 작업들을 간단하게 만드는데 도움이 된다. 

 

ㆍ하지만 아무리 간소화 되어 있어도 자료구조, 포인터 등 c++의 코어 기능 때문에 다른 스크립트 언어보단 복잡하다.

 

2. 스마트 포인터

 

ㆍ 언리얼엔진에서는 원시포인터 사용이 많이 위험하다.

 

ㆍ 포인터 관리를 돕기 위해 언리얼엔진의 c++프레임워크에서는 스마트 포인터를 권장한다

 

※ C++에서 언리얼엔진에 맞개 재정의된 언어이다.

 

 

▶ 스크립트 언어의 가장 큰 특징?

 

ㆍ컴파일러 대신 인터프리터를 사용한다.

 

컴파일 흐름

 

ㆍ일반적인 응용 소프트웨어에선 컴파일러에 의해 기계어로 번역된 채로 실행된다...

→ 컴파일러는 특성상 오류를 발견해도 끝까지 다 읽어들이는 특징이 있다.

→  코드 수정이 빈번하게 발생하면 매번 컴파일을 해야해서 개발 기간이 엄청 느리다.

→  규모가 큰 프로그램이라면 몇시간 단위로 잡아먹고 일일히 컴파일 하는것도 곤욕이겠다.

 

▶ 인터프리터란?

 

ㆍ 인터프리터는 코드를 한 줄씩 읽어서 바로 실행하는 방식을 사용한다.

 

ㆍ 이 방식은 스크립트 언어에서 주로 사용되며, 소스 코드의 수정이 빈번하게 발생하는 개발 환경에서 유용하다.

 

ㆍ 오류를 발견하면 실행을 바로 멈추기 때문에 디버깅에서도 유리하다.

 

언리얼 엔진에서는 핫리로드와 라이브코딩 기능을 제공한다.

 

ㆍ 핫 리로드 : 언리얼 엔진의 핫 리로드 기능은 특정 클래스나 모듈에 대한 변경사항만을 다시 컴파일하고, 그 결과를 이미 실행중인 게임에 즉시 반영할 수 있게 해준다. 

※예를들어 플레이어를 작업중이면 플레이어에 관련된 기능만 읽어들인다.

 

라이브 코딩

 

라이브 코딩은 프로그램이 실행 중일 때도 코드를 수정하고 그 결과를 바로 확인할 수 있는 기능이다.

※ 단, 반복을 돌리는 복잡한 변경사항이나 메모리 구조를 변경하는 등의 작업은 프로그램을 재시작 해야 반영됨.

언리얼의 라이브 코딩을 하면 이렇게된다.

 

 

▶ C++ 과 스크립트 언어의 차이점 

 

c++은 컴파일러 기반의 언어로 전체 소스코드가 기계어로 번역된 후 실행되는 반면

스크립트 언어는 인터프리터 방식을 사용하여 소스코드를 한 줄씩 읽고 바로 실행한다.