본문 바로가기

분류 전체보기669

언리얼엔진5 c++ AI 간의 충돌 방지 코드 ▣ MoveRequest는 AI가 어디로 어떻게 움직 일지를 정의하는 이동 요청 정보 구조체입니다. ▣ SetGoalLocation(FVector InLocation) MoveRequest.SetGoalLocation(TargetLocation); 이동 목표 지점을 설정합니다. InLocation은 FVector로, AI가 도달해야 할 실제 좌표입니다. MoveToLocation(...)을 쓰는 방식에서는 이 값이 필수입니다.중요: 이 값이 없다면 AI는 어디로 이동할지 모릅니다. ▣ SetAcceptanceRadius(float Radius)MoveRequest.SetAcceptanceRadius(10.0f); 목표 위치에 얼마나 가까이 도달하면 "도착"으로 간주할지를 설정합니다.단위는 cm입니다.예:.. 2025. 3. 29.
언리얼엔진5 c++ Animistance 데이터 ABP에서 바인딩 사용 ▣ AnimInstance에 만든 데이터를 ABP에서 바인딩해서 사용가능하고 상속관계인 클래스에서 AnimInstance에 값을 전달해서 바인딩 가능합니다. 2025. 3. 27.
언리얼엔진5 c++ Random함수 ▣ 함수설명FMath::Rand() - C의 rand() 함수 기반. 0~RAND_MAX 사이의 난수를 반환. - 주의: 정확한 범위 제어가 어려움. FMath::RandRange(Min, Max) - 가장 많이 사용되는 함수! - 정수 범위 내에서 원하는 구간을 정확히 지정 가능. FMath::FRand() - 부동소수점 난수. 주로 확률 계산에 사용 (ex. 0.3 FMath::FRandRange(Min, Max) - 부동소수점 범위에서도 원하는 구간을 랜덤하게. FMath::RandBool() - true/false를 50% 확률로 반환. 동전 던지기 같은 상황에서 자주 사용됨. FMath::RandHelper(Max) - 0 ~ Max - 1의 랜덤 정수를 생성. - 배열에서 인덱스를 랜덤 선택할.. 2025. 3. 27.
언리얼엔진5 c++ (C++에서는 정의하지 않고, 블루프린트에서 Event 노드로 구현 함수) ▣ BlueprintImplementableEvent이 함수는 블루프린트에서 '이벤트로 구현 가능한 함수'라는 뜻입니다.다시 말해, 이 함수는 C++에서는 정의하지 않고, 블루프린트에서 Event 노드로 구현합니다.Event OnFireStarted_BP 라는 노드가 블루프린트 클래스 내에서 자동으로 생성됩니다. ▣ 전체 예시 흐름 C++에서 Fire() 함수가 실행됨.Fire() 내부에서 OnPistolFireBP() 호출.블루프린트의 Event OnPistolFireBP가 반응.블루프린트에서 원하는 연출(이펙트, 애니메이션 등)을 실행. 2025. 3. 24.
언리얼엔진5 c++ EndPlay(Actor 종료시점 호출함수) ▣ AActor::EndPlay()란? EndPlay()는 액터가 월드(World)에서 제거될 때 호출되는 가상 함수(virtual function)입니다. - 언제 호출되나요? 액터가 Destroy() 되었을 때 레벨이 언로드(unload)되거나 리셋될 때 게임이 종료되거나 플레이 세션이 끝날 때 PIE(Play In Editor) 모드에서 Stop을 누를 때  ▣ 함수 구조 정리부분설명Super::EndPlay(EndPlayReason)부모 액터의 정리 로직을 먼저 실행 (필수!)GetController()이 캐릭터를 제어하는 컨트롤러 가져오기Cast()AI 전용 컨트롤러로 캐스팅AIController->BrainComponentAI의 두뇌 역할을 하는 컴포넌트, 보통 Behavior Tree를 실행.. 2025. 3. 22.
언리얼엔진5 c++ FindFunction ▣ TArray FoundDoors; UGameplayStatics::GetAllActorsOfClass(GetWorld(), AActor::StaticClass(), FoundDoors);- FoundDoors라는 TArray 배열을 생성합니다. UGameplayStatics::GetAllActorsOfClass(GetWorld(), AActor::StaticClass(), FoundDoors); 현재 World에 존재하는 모든 AActor 타입의 액터를 검색하여 FoundDoors 배열에 저장합니다.  - AActor::StaticClass()는 모든 액터의 부모 클래스이므로, 모든 액터가 포함됩니다. 만약 특정 클래스의 액터만 찾고 싶다면 AActor::StaticClass() 대신 해당 클래스(A.. 2025. 3. 5.
언리얼엔진5 meta ▣ meta 속성설명BindWidgetUMG 위젯을 C++ 변수에 자동 바인딩AllowPrivateAccessprivate 변수를 블루프린트에서 접근 가능하게 함ClampMin, ClampMax변수 값의 최소/최대 제한EditCondition특정 변수가 true일 때만 편집 가능DisplayName언리얼 에디터에서 표시될 변수명 변경Tooltip변수 설명 추가UIMin, UIMaxUI에서 슬라이더 범위 설정OverrideNativeName블루프린트에서 변수 이름 변경BindWidgetOptional위젯 바인딩이 선택적일 때 사용ForceInlineRowUI에서 같은 줄에 표시Categories블루프린트에서 변수 카테고리 설정WorldContext블루프린트 함수에서 월드 컨텍스트 필요CompactNodeT.. 2025. 3. 4.
언리얼엔진5 Menu Subsystem Add ▣ Initialize() 함수 (가상 함수)위젯이 생성될 때 호출되는 함수로, UUserWidget 클래스에서 상속받은 후 override 키워드로 재정의됨. 버튼 이벤트 바인딩 등을 설정하는 데 사용될 가능성이 있음.▣ UPROPERTY(meta = (BindWidget))BindWidget 속성을 사용하면, UMG(언리얼 모션 그래픽)에서 디자이너가 만든 버튼 위젯을 C++ 코드의 변수에 자동으로 연결할 수 있음. 즉, HostButton과 JoinButton은 WB_Widget에서 같은 이름으로 존재하는 버튼과 자동으로 매칭됨. UButton* 타입으로 선언되어 있으며, UI에서 버튼을 클릭하면 특정 동작을 수행하도록 연결 가능. ▣ meta란? meta는 Unreal Engine의 UPROPER.. 2025. 3. 4.
언리얼엔진5 Menu Class Setup ▣ MenuWidget이라는 이름설정 후 MultiplayerSessions Plugin으로 설정하고 클래스를 생성합니다.   ▣ 그럼 이런 문구가 나옵니다. 이 메시지는 Unreal Engine 5에서 새로운 C++ 클래스를 추가했지만, MultiplayerSessions 모듈을 다시 컴파일해야 한다는 것을 의미합니다. 그리고 자동 핫 리로드(hot reload)에 실패했다는 것도 함께 나타납니다. Yes 버튼을 클릭하고 언리얼엔진을 닫은 후에   ▣ Build.cs에서 UMG 모듈을 추가하고 Generate를 하면 해결됩니다.   ▣ 다시 Build.cs에서 Slate와 SlateCore를 추가합니다. Slate와 SlateCore는 Unreal Engine의 UI 시스템인 Slate(슬레이트)를 다.. 2025. 3. 3.
언리얼엔진5 Plugin Create Session Interface Delegate ▣  첫 번째  이미지 - 부모 클래스 선택부모 클래스 선택 화면All Classes 버튼을 눌러 모든 C++ 클래스를 검색 가능하게 변경.GameInstanceSubsystem을 선택하여 새로운 서브시스템 클래스를 이 클래스로부터 상속받도록 설정.Next 버튼을 눌러 진행.- 이 작업의 목적:새로운 클래스가 GameInstanceSubsystem을 기반으로 하도록 설정.GameInstanceSubsystem을 사용하면 게임이 실행되는 동안 계속 유지되는 기능을 추가할 수 있음.따라서, 온라인 세션을 관리하는 기능을 여기에 구현할 수 있음. ▣ 두 번째 이미지 - C++ 클래스 생성 설정 새로운 C++ 클래스를 만들기 위한 설정 창입니다. 클래스 이름: MultiplaySessionsSubsystem 클.. 2025. 2. 25.
언리얼엔진5 Multiplay Plugin Create ▣ Plugins 개념 플러그인(Plugin)은 언리얼 엔진에서 특정 기능을 추가하거나 확장할 수 있도록 만든 독립적인 모듈입니다. 플러그인은 프로젝트에 필요한 특정 기능을 활성화하거나, 성능을 향상시키는 역할을 합니다. 플러그인은 언리얼 엔진의 기능을 확장하는 "추가 기능"입니다. 기본 엔진 기능 외에 온라인 기능, AI, VR, 멀티플레이어, 물리 엔진, 커스텀 렌더링 기능 등을 추가할 수 있습니다. ▣ 플러그인의 역할 예시 온라인 기능 (Steam, EOS (Epic Online Services)) 추가 → OnlineSubsystem, OnlineSubsystemSteam AI 기능 강화 → AIModule, BehaviorTreeEditor VR(가상현실) 기능 추가 → SteamVR, Ocul.. 2025. 2. 19.
언리얼엔진5 Session Join ▣ 코드 설명 - UWorld* World = GetWorld(); GetWorld() 함수는 현재 캐릭터가 속한 UWorld 객체를 반환합니다. UWorld는 게임의 맵과 관련된 정보를 포함하는 핵심 클래스입니다. World 변수를 통해 현재 실행 중인 게임의 환경을 참조할 수 있습니다. - if (World) World가 nullptr이 아니라면, 즉, 유효한 UWorld 객체라면 다음 동작을 수행합니다. nullptr이면 아무 동작도 하지 않도록 안전하게 처리합니다. - World->ServerTravel(FString("/Game/ThirdPerson/Maps/Lobby.Lobby?listen")); ServerTravel 함수는 서버가 새로운 맵으로 이동하도록 만듭니다. "/Game/ThirdP.. 2025. 2. 18.
언리얼엔진5 Session Join Setup ▣ 코드 상세 설명 UFUNCTION(BlueprintCallable) void JoinGameSession(); UFUNCTION(BlueprintCallable)을 추가하여 블루프린트에서도 호출 가능하도록 설정 현재 온라인에서 사용 가능한 게임 세션을 검색하고, 참가하는 역할을 하는 함수 ▣void OnFindSessionsComplete(bool IsWasSuccessful); 세션 검색이 완료되었을 때 호출되는 콜백 함수  IsWasSuccessful이 true이면 세션 검색 성공, false이면 검색 실패 JoinGameSession()을 실행하면, 온라인에서 참여 가능한 세션을 검색하고, 그 결과를 OnFindSessionsComplete()에서 처리 ▣ FOnFindSessionsComple.. 2025. 2. 15.
언리얼엔진5 Create Session ▣ bInitServerOnClient=true란? bInitServerOnClient=true는 Steam Online Subsystem에서 클라이언트가 직접 서버를 호스팅 할 수 있도록 설정하는 옵션입니다. 즉, 전용 서버(Dedicated Server) 없이 클라이언트가 자체적으로 멀티플레이어 세션을 만들고, 다른 플레이어를 초대할 수 있도록 합니다. ▣ 언제 bInitServerOnClient=true를 사용해야 할까? 호스트 플레이어(클라이언트)가 직접 세션을 만들고 다른 플레이어를 초대하는 경우일반적인 P2P 멀티플레이 게임에서는 플레이어 한 명이 세션을 생성하고 다른 플레이어가 참가하는 방식이 일반적입니다. 예를 들어, 로컬에서 방을 만들고 친구를 초대하는 Steam 멀티플레이 게임이라면 b.. 2025. 2. 14.
언리얼엔진5 Online Subsystem Steam Connection ▣ TSharedPtr OnlineSessionInterface; IOnlineSession을 스마트 포인터(TSharedPtr)로 관리하여 세션 인터페이스를 안전하게 사용. ESPMode::ThreadSafe를 사용하여 멀티스레드 환경에서도 안전하게 공유할 수 있도록 설정. ▣  멀티스레드(Multithreading)란 하나의 프로그램(프로세스) 내에서 여러 개의 작업(스레드, Thread)을 동시에 실행하는 기술을 의미합니다. ▣  스레드(Thread)란? 스레드는 프로세스 내에서 실행되는 작은 작업 단위. 하나의 프로그램(프로세스)은 여러 개의 스레드를 가질 수 있음.▣  멀티스레드란? CPU의 여러 코어를 활용하여 여러 작업을 동시에 실행하는 방식. Unreal Engine 같은 게임 엔진에서는 .. 2025. 2. 13.
언리얼엔진5 Online Subsystem Steam Setting ▣ C++ Platform으로 프로젝트를 생성하고 Online Subsystem Steam 플러그인을 설치합니다.   ▣ build.cs에서 OnlineSubsystemSteam, OnlineSubsystem을 추가합니다.Unreal Engine에서 Online Subsystem Steam을 사용하려면 Build.cs 파일에 관련된 모듈을 추가해야 합니다.이는 Unreal Build System(UBT)이 컴파일 시 필요한 모듈을 포함하도록 지시하기 위함입니다.  ▣ 프로젝트 폴더에서 Config 폴더에 들어가서  DefaultEngine.ini  파일을 선택합니다.    ▣ APIhttps://dev.epicgames.com/documentation/ko-kr/unreal-engine/online-su.. 2025. 2. 13.
언리얼엔진5 c++ Multiplay test ▣ Default Level과 Lobby Level을 생성합니다.   ▣ Player Blueprint에서 1번 키를 눌렀을 때, 2번 키를 눌렀을 때에 대한 노드를 완성합니다.  ▣ Options 옵션이란? 역할: 레벨이 로드될 때 추가적인 설정이나 명령행 옵션을 전달하는 문자열입니다. 예를 들어, "open MyMap?listen"와 같이 사용하면 MyMap을 로드하면서? listen 옵션도 함께 적용됩니다. ▣ 사용 방식: Open Level (by Name) 노드에서 Level Name과 함께 Options 입력란에 옵션 문자열을 넣어주면, 엔진은 이를 레벨 로딩 명령에 추가하여 처리합니다. ▣ 왜 Options에 listen을 넣어야 하는가? 리슨 서버 모드 지정: listen 옵션은 현재 게임.. 2025. 2. 11.
언리얼엔진5 c++ virtual, override ▣ 부모 클래스에서 virtual을 사용하면 자식 클래스에서 재정의(Override) 가능 virtual을 사용하지 않으면 부모 클래스의 함수만 호출됨 ▣ override 키워드는 부모의 가상 함수를 정확히 재정의(Overriding)하는지 확인하는 역할을 합니다.   ▣ 추상 클래스(Abstract Class)를 활용하여, 강제적으로 자식 클래스에서 함수 재정의하도록 만듭니다. 2025. 2. 8.
언리얼엔진5 c++ Class, 생성자, 기본멤버함수 ▣ 클래스 (Class)클래스는 객체를 생성하는 템플릿(설계도)이다. 멤버 변수(속성)와 멤버 함수(기능)로 구성됨. 생성자(Constructor)를 이용해 멤버 변수를 초기화할 수 있음.      ▣ 생성자(Constructor)가 가장 먼저 실행됩니다.  ▣ BeginPlay()가 게임이 시작될 때 한 번 호출됩니다. ▣ Tick(float DeltaTime)이 프레임마다 실행되며 메시지가 출력됩니다. ▣ 소멸자(Destructor)가 실행되며 객체가 메모리에서 해제됩니다.  ▣ 상속하여 자식 클래스를 활용하여 부모클래스 함수를 호출해서 사용 가능 2025. 2. 8.
유니티 LOD Group ▣ LOD Group 컴포넌트를 관리할 빈오브젝트를 생성하고 컴포넌트를 추가합니다.   ▣ LOD Group컴포넌트에 있는 빈오브젝트 안에 여러 모양에 오브젝트를 추가합니다.   ▣ LOD Group에서 LOD 0, LOD 1, LOD 2 등 레벨마다 Renders를 하나씩 추가합니다.  ▣ LOD Levels (LOD 레벨) LOD Group에서는 여러 개의 LOD 레벨을 추가할 수 있습니다. 각 LOD 레벨에는 다른 메쉬(Renderer)를 설정할 수 있으며, 카메라 거리(뷰 프러스텀)에 따라 특정 LOD가 활성화됩니다. LOD 0: 가장 높은 디테일의 모델 (가장 가까운 거리에서 보임) LOD 1: 중간 디테일 모델 LOD 2: 낮은 디테일 모델 LOD 3 (이하 추가 가능): 더 낮은 디테일 모델.. 2025. 2. 8.
언리얼엔진5 c++ int32 타입의 숫자를 FText로 변환 ▣ SetText(FText) : UTextBlock의 텍스트를 설정하는 함수▣ FText::AsNumber(int32 Value) : int32 타입의 숫자를 FText로 변환하는 함수▣ 즉, MedicineMap[EMedicineType::Drink] (현재 음료 개수)를 FText로 변환한 후 DrinkCountTextBlock에 설정합니다. 2025. 1. 31.