전체 글 34

멀티 플레이 네트워크

실행모드정의특징Standalone네트워킹을 고려하지 않는 단일 인스턴스- 싱글플레이어(로컬 세션)- Replicate 미사용- Gameplay 클래스가 하나로 실행Dedicated ServerServer 전용 인스턴스- Local 플레이어 없음- 렌더링 X / GPU 없이 구동 가능- 게임 로직, 네트워크 통신만 처리- 원격 머신이나 클라우드 배포Listen Server한 플레이어가 동시에 Server 호스트 역할- Server이자 Client 역할 수행- 호스트에게 UI, PlayerController 존재- 호스트가 게임 종료시 Server도 종료- P2P 스타일 게임에서 사용Client호스트가 아닌 모든 플레이어- Server로부터 데이터를 받음- 자신의 입력을 Server에 전송- 자율적 Play..

반복문

C++의 반복문은 주로 3가지가 있다. For문, While문, do-while문이 있으며 전부 반복해서 실행하지만 조건이 서로 다르다. For문은 반복 횟수가 정해진 경우에 적합하고 While문은 반복 횟수가 정해지지 않아 조건이 참인 동안 계속 반복할 때 사용된다. For문for (초기식; 조건식; 증감식) { // 반복할 코드}for (int i = 1; i  초기식: 반복문이 시작될 때 한 번 실행(변수 초기화)조건식: 반복을 계속할지 결정 (true면 실행, false면 종료)증감식: 반복이 끝날 때마다 실행(변수 값 변경) While문while (조건식){ // 반복할 코드}int i = 1;while (i  조건식: true면 반복실행, false면 종료* While문은 For문과..

C++ 메모장 2025.03.07

FTimerHandle / FTimerManager

FTimerHandle은 언리얼 엔진에서 시간 기반 작업을 예약하고 관리하는 도구이다. 보통 특정 시간이 지난 후 함수를 실행하거나, 일정 간격으로 반복 실행할 때 사용된다. 동작은 FTimerManager를 통해 동작한다.  역할FTimerHandleFTimerManager타이머 제어를 위한 핸들(참조값) 역할모든 타이머를 관리하는 역할시간 측정이 아닌 FTimerManager의 등록된 타이머를 가리킴내부적 등록된 타이머들을 리스트에 저장, 프레임 단위로 재확인FTimerHandle를 사용해 특정 타이머를 멈출 수 있음시간이 지나면 함수를 실행, 반복 실행일 경우 재등록FTimerHandle은 반드시 클래스 멤버 변수로 선언해야함 사용법FTimerHandle MyTimerHandle;void Start..

UE_LOG

UE_LOG는 언리얼 엔진에서 로그를 출력하는 매크로이며 디버깅, 실행 상태를 확인하는데 유용하며 콘솔, 로그 메세지를 출력할 수 있다. UE_LOG(카테고리, 심각도, TEXT("메세지"), ...); 카테고리더보기  카테고리에는 주로 LogTemp를 사용하지만  이는 기본 제공되는 임시 로그 카테고리이다.자신이 보기 편하게 로그 카테고리를 직접 만들 수 있다. //새 로그 카테고리 선언DECLARE_LOG_CATEGORY_EXTERN(MyGameLog, Log, All);//카테고리 정의DEFINE_LOG_CATEGORY(MyGameLog);//사용UE_LOG(MyGameLog, 심각도, TEXT("메세지"));  심각도더보기심각도는 언리얼 엔진에서 제공해주는 기능이며 로그의 색상을 바꾸고 위험성을 ..

TWeakObjectPtr

TWeakObjectPtr은 언리얼에서 제공하는 약한 참조(Weak Reference)를 위한 스마트 포인터이다.일반적인 스마트 포인터와 다르게 객체를 직접 소유하지 않고 객체가 소멸되었는지 확인하는 기능을 제공한다.  TWeakObjectPtr는 객체를 소유하지 않으면서도 nullptr 체크가 자동으로 가능하여 안전하게 사용할 수 있다.IsValid()로 항상 객체가 살아있는지 확인해야 한다.가비지 컬렉션과 함께 사용 가능하여 UObject*를 직접 사용하는 것보다 안전하다.순환 참조 방지를 위해 TSharedPtr 대신 사용할 수도 있다.  TWeakObjectPtr WeakActorPtr = Actor; //Actor는 AActor* 타입이어야 한다.//IsValid()를 사용하여 포인터가 유효한지..

UPROPERTY & UFUNCTION

UPROPERTY과 UFUNCTION은 둘 다 언리얼 엔진의 리플렉션(Reflection) 시스템에서 사용된다.각각 변수와 함수에 대한 메타 데이터를 제공하는 역할을 한다. UPROPERTY더보기  C++에서는 기본적으로 GC(가비지 컬렉션) 기능이 없어 메모리를 수동으로 관리해야 한다.하지만 언리얼 엔진은 UObject 기반의 객체들을 자동으로 관리해주기 위해 리플렉션 시스템을 제공하며 그것을 사용 하게 하는 것이 UPROPERTY이며 이것을 사용하면 엔진이 변수를 자동으로 관리할 수 있게 되고, 다양한 엔진 기능(블루프린트, 직렬화, 네트워크 동기화)에 사용할 수 있다.   UPROPERTY는 블루프린트에서 사용 가능하게 해주고, 언리얼의 GC 시스템에서 관리하게 해주며 직렬화를 지원하고 네트워크 동..

stringstream

https://school.programmers.co.kr/learn/courses/30/lessons/150370 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr본 메모는 프로그래머스 '개인정보 유효기간' 문제 풀이 이후 정리함 개인정보 유효기간더보기문제:고객의 약관 동의를 얻어서 수집된 1~n번으로 분류되는 개인정보 n개가 있습니다. 약관 종류는 여러 가지 있으며 각 약관마다 개인정보 보관 유효기간이 정해져 있습니다. 당신은 각 개인정보가 어떤 약관으로 수집됐는지 알고 있습니다. 수집된 개인정보는 유효기간 전까지만 보관 가능하며, 유효기간이 지났다면 반드시 파기해야 합니다.예를 들어, A라는 약관의 ..

C++ 메모장 2025.02.25

컨테이너 멤버 함수

이후 추가될 수 있음front, back더보기front는 컨테이너의 첫 번째, back은 컨테이너의 마지막 요소에 대한 참조를 반환한다vector numbers = {10, 20, 30, 40};int first = numbers.front(); // 첫 번째 요소: 10int last = numbers.back(); // 마지막 요소: 40 컨테이너가 비어 있으면 동작이 정의되지 않아 사용 전에 비어있지 않은지 확인해야한다.if (!numbers.empty()) { int first = numbers.front(); int last = numbers.back();}begin, end더보기begin은 컨테이너의 첫 요소를, end는 컨테이너의 마지막 요소의 다음 위치를 가리키는 반복자를 반..

C++ 메모장 2025.02.24

map, unordered_map

https://school.programmers.co.kr/learn/courses/30/lessons/118666 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr본 메모는 프로그래머스 '성격 유형 검사' 문제 풀이 이후 정리함 성격 유형 검사더보기문제:나만의 카카오 성격 유형 검사지를 만들려고 합니다.성격 유형 검사는 다음과 같은 4개 지표로 성격 유형을 구분합니다. 성격은 각 지표에서 두 유형 중 하나로 결정됩니다.지표 번호성격 유형1번 지표라이언형(R), 튜브형(T)2번 지표콘형(C), 프로도형(F)3번 지표제이지형(J), 무지형(M)4번 지표어피치형(A), 네오형(N)4개의 지표가 있으므로 성격 ..

C++ 메모장 2025.02.21

std::find

findstd::find는 주어진 범위 내에서 특정 값을 찾을 때 사용한다. find(first, last, value);first : 탐색을 시작할 반복자(iterator)last : 탐색을 끝낼 반복자(iterator) (이 위치는 포함되지 않음)value : 찾을 값 - 찾으면 해당 요소의 반족자를 반환, 찾지 못하면 last를 반환한다. 예를 들어#include #include #include // std::find 사용int main() { std::vector numbers = {10, 20, 30, 40, 50}; // 30 찾기 auto it = std::find(numbers.begin(), numbers.end(), 30); if (it != numbers.en..

C++ 메모장 2025.02.20