📒학습 내용
1. C++로 블루프린트 라이브러리를 활용할 수 있는 과정을 배웠다. 이는 게임 개발에서 코드 재사용성과 확장성을 높혀준다.
2. 현대 게임 개발에서는 ChatGPT, Grok 등의 AI 도구를 활용하는 것이 효율적이지만, 기본 원리를 이해하는 것이 그 무엇보다 중요하다...!
"코드를 모르고 AI를 사용하면 독이고, 알고 사용하면 상호 보완 관계를 만들 수 있습니다."
🔍 블루프린트 함수 라이브러리의 이해
블루프린트 함수 라이브러리(Blueprint Function Library)는 C++에서 구현한 함수를 블루프린트에서 바로 사용할 수 있게 해준다. 이를 통해 다음과 같은 이점을 얻을 수 있다:
- 성능이 중요한 로직을 C++로 구현하여 실행 속도를 향상시킨다.
- 복잡한 알고리즘이나 시스템을 캡슐화하여 블루프린트에서 쉽게 사용할 수 있다.
- 여러 프로젝트에서 재사용할 수 있는 코드 라이브러리를 구축할 수 있다.
💡게임 개발에서 블루프린트는 빠른 프로토타이핑과 시각적 디버깅에 탁월하지만, 복잡한 수학 연산이나 대용량 데이터 처리는 C++로 구현하는 것이 성능 면에서 유리하다!
🛠️ C++ 블루프린트 라이브러리 구현 단계
1. C++ 클래스 생성하기
먼저 언리얼 에디터에서 C++ 클래스를 생성한다:
- 프로젝트 파일을 더블 클릭하여 언리얼 에디터를 연다.
- Tools 메뉴에서 'New C++ Class...'를 클릭.
- 'Blueprint Function Library'를 선택하고 'Next' 버튼 클릭.
- C++ 파일의 이름을 'MyTestCPPLib'로 입력하고 'Create Class' 버튼 클릭.
💡프로젝트의 규모가 커질수록 기능별로 라이브러리를 분리하는 것이 좋다.
예를 들어, 수학 함수는 MathLib, 문자열 처리는 StringLib 등으로 나누면 코드 관리가 용이하다.
2. IDE로 코드 수정하기
언리얼 에디터에서 "코드를 수정할 것인가?"라는 메시지가 표시되면:
- 'YES' 버튼을 클릭하고 언리얼 에디터는 닫는다.
- Visual Studio 2022에서 솔루션 빌드!
- 빌드가 완료되면 프로젝트를 다시 열고 '새로 빌드할 것인가?'라는 메시지에 'Yes'를 선택.
3. C++ 코드 작성하기
이제 다음과 같이 헤더 파일과 소스 파일을 작성:
MyTestCPPLib.h
#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "MyTestCPPLib.generated.h"
UCLASS()
class UMyTestCPPLib : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, Category = "MyTestCPPLib")
static FString GetMyFirstCPP();
};
MyTestCPPLib.cpp
#include "MyTestCPPLib.h"
FString UMyTestCPPLib::GetMyFirstCPP()
{
return FString(TEXT("Hello CPP lib in BP"));
}
💡UFUNCTION 매크로의 옵션들을 이해하는 것이 중요하다. BlueprintCallable은 블루프린트에서 호출 가능한 함수를, BlueprintPure는 값만 반환하는 함수를 의미. 상황에 맞게 적절히 사용하면 블루프린트 그래프의 가독성을 높일 수 있다.
4. 코드 컴파일하기
코드를 작성한 후에는:
- 코드 저장.
- 언리얼 에디터에서 'Alt + Ctrl + F11' or 오른쪽 하단의 'Recompiles and reloads C++ code' 메뉴 클릭하여 컴파일
5. 블루프린트에서 테스트하기
컴파일이 완료되면 블루프린트에서 방금 만든 함수를 사용할 수 있다:
- 아무 블루프린트나 열거나 새로 생성.
- 그래프 영역에서 우클릭하고 'MyTestCPPLib'를 검색.
- 'GetMyFirstCPP' 함수를 선택하여 이벤트그래프에 추가.
🔄 C++과 블루프린트 연동의 심화 이해
1. UFUNCTION 매크로 옵션 이해하기
UFUNCTION 매크로는 C++ 함수를 언리얼 엔진의 리플렉션 시스템에 등록하는 역할:
BlueprintCallable | 블루프린트에서 실행 노드로 호출할 수 있다. |
BlueprintPure | 값만 반환하는 함수입니다. 실행 핀이 없다. |
BlueprintImplementableEvent | C++에서 선언만 하고 블루프린트에서 구현할 수 있다. |
BlueprintNativeEvent | C++에서 기본 구현을 제공하고 블루프린트에서 재정의할 수 있다. |
Category | 블루프린트 에디터에서 함수를 분류하는 카테고리. |
실무 팁: 복잡한 프로젝트에서는 Category를 체계적으로 관리하는 것이 중요합니다. "ProjectName|Subsystem|Function"과 같은 형식으로 계층적인 카테고리를 만들면 함수를 쉽게 찾을 수 있습니다.
복잡한 프로젝트에서는 Category를 체계적으로 관리하는 것이 중요.
"ProjectName|Subsystem|Function"과 같은 형식으로 계층적인 카테고리를 만들면 함수를 쉽게 찾을 수 있다.
2. 실무에서의 C++ 라이브러리 활용 사례
게임 개발 현장에서 C++ 라이브러리는 다양한 용도로 활용된다:
- 수학 연산: 복잡한 물리 시뮬레이션, 경로 탐색 알고리즘 등
- 데이터 처리: JSON, XML 파싱, 데이터베이스 연동 등
- 최적화: 자주 호출되는 함수, 대용량 데이터 처리 등
- 외부 라이브러리 통합: 써드파티 라이브러리를 게임에 연동할 때
🧠 언리얼 엔진 네트워크 개념 정리
언리얼 엔진의 네트워크 개념을 다시 한번 정리:
1. Listen Server와 Dedicated Server의 차이
서버 유형 | 설명 | 사용 사례 |
Listen Server | 클라이언트와 서버가 동일한 프로세스에서 실행됩니다. | 개발 테스트, 소규모 멀티플레이어 게임 |
Dedicated Server | 서버가 독립적인 프로세스로 실행됩니다. | 대규모 온라인 게임, 공식 서비스 |
2. Replication 속성 이해하기
속성 | 설명 |
Run on Server | 서버에서 실행되는 함수. 클라이언트가 서버에 요청할 때 사용한다. |
Run on Owning Client | 특정 플레이어의 클라이언트에서 실행되는 함수. 서버가 특정 클라이언트에 명령할 때 사용한다. |
Multicast | 모든 클라이언트에서 실행되는 함수. 서버가 모든 클라이언트에 브로드캐스팅할 때 사용한다. |
3. 권한 체크의 중요성
네트워크 코드에서는 항상 권한을 체크해야 한다:
함수 | 설명 |
Has Authority | 현재 클라이언트가 객체를 제어할 권한이 있는지 확인한다. Listen Server와 Dedicated Server 모두에서 사용 가능하다. |
isServer | 현재 코드가 서버에서 실행 중인지 확인한다. Dedicated Server에서 주로 사용한다. |
Remote Role / Local Role | 객체의 네트워크 역할을 추가로 확인한다. |
'Dev. > 게임 네트워크' 카테고리의 다른 글
🌠UE5 채팅 시스템 내용 보완 (0) | 2025.03.23 |
---|---|
[TIL_250317] UE5로 채팅 시스템 만들기(멀티플레이 시스템 공부) (0) | 2025.03.17 |
[TIL_250314] 언리얼 네트워크와 객체 통신 이해 (0) | 2025.03.14 |
[TIL_250313_1] 언리얼 소스 코드 빌드하기 (0) | 2025.03.13 |
[TIL_250312] 온라인 게임과 네트워크 구성 이해 (0) | 2025.03.12 |