목록Today I Learn (213)
나만의 작은 도서관
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. [언리얼] 다시 정리하는 액터의 Life Cycle 액터의 생명 주기(Life Cycle)이란?레벨에 Actor가 생성, 초기화, 플레이, 소멸되는 전체과정각 단계마다 특정 이벤트 함수들이 자동으로 호출된다.각 이벤트 함수들이 어느 시점에 호출되는지 이해하면 적절한 시점에 로직을 채워 넣을 수 있음 액터 생성 단계 Construction Script액터가 처음 생성될 때 실행.에디터에서 액터의 속성(Property)을 수정할 때마다 호출되므로, 이곳에 게임플레이 로직을 작성하거나, 무거운 작업을 추가하면 안 된다.여기서 액터의 속성은 에디터에서 액터의 디테일 패널에 노출되는 값들이 대표적이다. 따라서, 액터를 레벨에 배치..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. [언리얼] BeginPlay()에 대해서… BeginPlay() 함수란?BeginPlay는 액터(AActor)가 월드(UWorld)에서 처음으로 활성화되고 시뮬레이션되기 시작할 때 단 한 번 호출되는 이벤트 함수이다. BeginPlay()가 호출되는 정확한 시점?하나의 액터를 두고 BeginPlay가 호출되는 시점을 정확하게 표현하자면 아래와 같다.액터의 모든 초기화 작업이 완료되었으며(부착된 컴포넌트 포함), 월드에 해당 액터가 등록되어 인지할 수 있는 시점. 레벨에 배치된 액터의 BeginPlay(), 게임 도중에 스폰된 액터의 BeginPlay()언리얼에서 이 둘의 BeginPlay() 호출 시점은 조금 다르다..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. [언리얼] LoadMap 안에서 일어나는 과정을 알아보자 ===LoadMap전 엔진 초기화 과정(처음 켰을때 한 번만 진행)=== 1. GEngine::Start엔진을 시작{ SCOPED_BOOT_TIMING("GEngine->Start()"); GEngine->Start();} 2. GEngine::Init()GameInstance, GameViewportClient, LocalPlayer를 생성 및 초기화 LoadMap을 기점으로 생성되는 객체LoadMap 이후에 생성되는 모든 객체는 UWorld에 종속되며, 레벨 전환 시 UWorld가 파괴되기 때문에 이에 종속된 객체들도 전부 파괴된다. 따라서, 위 사진에서 UEn..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. [언리얼] GameMode와 내부 Property들의 역할 시작하기 앞서…GameMode와 내부에 존재하는 Property들은 언리얼 네트워크 시스템을 밀접한 관련이 있다. 즉, 서버가 따로 없는 싱글플레이어 게임인 경우 GameMode 대부분의 기능이 사용되지 않으므로, 아래의 설명들은 멀티플레이어 게임을 기준으로 설명한다. 게임 모드(GameMode)란?게임의 규칙을 결정하고 정보를 처리하는 액터(Actor).서버 전용 클래스이며, 클라이언트에는 존재하지 않는다.언리얼에서 제공하는 게임 모드 클래스는 AGameModeBase와 AGameMode가 있으며, 현재 시점(UE5.3)에서 아래와 같은 역할을 한다.AGame..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. [언리얼] SpawnActor에 따른 BeginPlay() 호출 시점이전에도 한 번 다룬 적이 있는데, 새롭게 알게 되거나 정리된 내용이 많이 생겨서 다시 다루려고 한다.SpawnActor의 경우, 시점에 따라 BeginPlay()가 호출되는 타이밍이 다르다. 거두절미하고 결과만 이야기하자면 아래와 같다. BeginPlay() 호출 시점게임 플레이 전(Ex. LoadMap()을 호출한 경우)SpawnActor() 함수의 반환 시점에 BeginPlay()가 호출되지 않고, 레벨이 시작될 때 AActor::BeginPlay()가 호출된다.게임 플레이 중(Ex. 레벨이 열려있는 상황)SpawnActor() 함수가 스폰한 액터는..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. [언리얼] 블루프린트는 오버로딩을 지원하지 않는다.C++함수는 오버로딩을 지원하기 때문에 아래와 같이 작성하는 것이 가능하다.AMonster* SpawnMonster(int32 TemplateId, const FTransform& Transform);AMonster* SpawnMonster(int32 TemplateId, const FVector& Location, const FRotator& Rotation);위 두 SpawnMonster는 서로 다른 시그니처를 가진 함수이기 때문에 내부적으로 다른 함수로 취급하게 된다. 그런데 이런 오버로딩 기능이 블루프린트에서는 지원하지 않는다. 따라서, 아래와 같은 코드는 오류가 ..