0. 개요
1. 팀 프로젝트
1. 채팅 기능 구현하기
기초적인 채팅 시스템을 만들었다.
각 메세지 타입에 맞게 메세지 로그 박스에 잘 추가되는 것을 확인할 수 있었다.
아직, 팀 채팅이 상대팀에게도 날라가기 때문에 해당 구분하는 로직을 추가하면 될 것 같다.
우선 팀을 분류해 메세지를 전달하기 위해서 팀 태그를 알아야 한다.
하지만, 지금 기본적인 로직을 우리가 직접 구현한 것이 아니라 이번 팀프로젝트의 요구사항인 탬플릿을 가져와 작업중이기 때문에 해당 탬플릿을 분석해야했다.
찾아보니, BPC_MultiplayerEventsManager 컴포넌트에서 해당 Tag를 관리하는 것을 확인했다.
하지만, 지금 ChatSystem은 C++로만 작업중이기 때문에 BPCharacter가 가지고있는 컴포넌트에 접근해 블루프린트 컴포넌트의 변수를 C++로 가져와 사용하는게 불가능했다….
그래서 방법을 생각해보다가 BPC_MultiplayerEventsManager의 부모 클래스를 직접 C++로 작업해 해당 TeamTag부분을 부모 클래스의 C++쪽으로 옮겨주는 작업을 진행했다.
즉, ActorComponent를 상속 받아 C++ GFMulitplayerEventsManager를 만들어주고 Tag 변수 2개를 추가한 뒤, BPC_MultiplayerEventsManager의 부모로 설정해주었다.
c++ 컴포넌트를 블루 프린트의 부모로 설정하거나, BP로 생성하기 위해서는
UCLASS( Blueprintable, BlueprintType, ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
이런 지정자들을 붙여주어야 한다.
이후에는 BPC_MultiplayerEventsManager의 TeamTag 변수들을 모두 GFMulitplayerEventsManager의 변수로 전환해주었다.
또, 컴포넌트의 변수들을 리플리케이션하기 위해 설정을 해주어야 했는데,
SetIsReplicatedByDefault(true);
다른 함수를 사용해 설정해 주어야 한다.
이후에는 팀 태그를 이용해 메세지를 분류해 전달해주도록 로직을 짜주어 완성했다.
2. 채팅 UI 디자인 수정하기
UI 디자인을 조금 수정해 주었다.
3. 메인 로비 작업 개요
채팅 시스템 기초가 모두 완성되었기 때문에 이번에는 메인 로비부터 로비까지 작업을 할 것이다.
봐서.. UI부분을 가운대로 옮길까도 고민중이다.
우선은 채팅 UI뿐 아니라 해당 메인 로비 UI에도 사용할만한 여러 텍스처를 살펴봐야할 것 같다...
일단 이번주까지 메인 로비와 대기방을 만들어야 한다.
2. 모의 면접 스터디
1. new/malloc , free/delete의 차이
new 키워드는 전달받은 대상의 포인터 자료형으로 반환해줍니다. 만약 대상이 클래스일 경우 생성자를 호출해 줍니다.
이와는 반대로 delete는 전달받은 주소의 메모리를 해제해주고, 대상이 클래스일 경우 소멸자를 호출해줍니다.
malloc은 인자로 데이터의 size를 전달해 해당 사이즈만큼의 메모리를 할당받아 옵니다. 이때, 반환받은 주소는 void* 타입이기 때문에 따로 형변환을 거쳐 사용해야 합니다.
free는 delete와 마찬가지로 전달 받은 주소의 메모리를 해제해줍니다.
malloc/free는 라이브러리가 제공하는 함수이고, new/delete는 언어가 제공하는 연산자입니다.
malloc은 필요한 메모리양을 바이트 단위로 지정하고, void*를 리턴해줍니다. 또, 초기값을 줄 수 없으며 생성자를 호출할 수 없습니다.
대신 malloc함수로 할당한 메모리는 realloc으로 크기를 바꿔 재할당 할 수 있다는 장점이 있습니다.
new는 할당 타입을 지정하고 해당 타입의 포인터를 리턴해줍니다. 때문에 malloc과 다르게 따로 타입 캐스팅을 해주지 않아도 됩니다. 또, 초기값을 줄 수 있으며 대상이 객체일 경우 생성자를 자동으로 호출해줍니다.
하지만 크기를 재할당하는 기능이 없어 새로 할당하여 복사하고 원래 메모리를 해제해주는 과정을 직접 해줘야하는 단점이 있습니다.
꼬리 질문 준비
- 그렇다면, new나 malloc을 사용한 뒤, free나 delete를 사용하지 않으면 어떻게 되나요?
⇒ 프로그램이 끝나면 운영체제 차원에서 메모리를 회수하지만, 개발 과정이나 실행 파일이 실행중일 때, 메모리 누수가 발생할 수 있고, 이로 인해 크래시가 발생할 수 있다.
⇒ 장시간 실행되는 프로그램의 경우 메모리 누수가 발생하면, 나중에 사용가능한 메모리가 부족하게 되어 크래시가 발생할 수 있다. - new나 malloc으로 할당 받은 주소가 존재하는 영역은 어디인가요?
⇒ Heap 영역 - malloc으로 전달 받은 주소의 타입은 무엇인가요?
⇒ void 자료형이다. - new와 malloc으로 객체를 생성할 때, 에러가 발생하면 어떻게 되나요?
⇒ new는 예외처리를 하지만, malloc은 예외처리 없이 null을 반환합니다. - Heap 영역은 무엇인가요?
⇒ 프로그램 실행 중에 동적으로 할당되는 메모리 공간입니다.
이 영역은 스택 영역과 달리 크기가 고정되어 있지 않습니다.
2. 언리얼에서 캐릭터 클래스가 가진 기능을 설명해주세요.
캐릭터 클래스는 Pawn을 상속 받아 만들어졌기 때문에 Actor와 Pawn의 기능을 사용할 수 있습니다.
캐릭터 클래스는 CharacterMovementComponent, CapsuleComponent, SkeletalMeshComponent가 추가 되었습니다.
CharacterMovementComponent는 중력을 반영한 움직임을 제공하고, 다양한 움직임을 설정할 수 있습니다.
뿐만아니라 현재 움직임에 대해 더 많은 정보를 전달해주고, 멀티 플레이 네트워크 환경에서 캐릭터들의 움직임을 자동으로 동기화 시켜줍니다.
면접 대답 준비가 아직 부족한 것 같아서 더 공부를 해야할 것 같다.
'프로그래밍 > Unreal 부트캠프' 카테고리의 다른 글
TIL 2025.04.08 기록 (0) | 2025.04.08 |
---|---|
TIL 2025.04.07 기록 (3) | 2025.04.07 |
TIL 2025.04.02 기록 (0) | 2025.04.02 |
TIL 2025.04.01 기록 (0) | 2025.04.01 |
TIL 2025.03.31 기록 (0) | 2025.03.31 |