본문 바로가기

unreal567

언리얼엔진5 c++ TArray 생성, TArray.Add(), TArray.Emplace() 차이 ▣ 함수설명Add()배열 끝에 요소 추가 (복사/이동 생성자 필요)Emplace()배열 끝에 직접 생성자 호출하여 요소 추가Remove()특정 값을 가진 요소 제거RemoveAt(Index)인덱스 위치의 요소 제거Empty()배열을 비움Num()배열의 요소 개수 반환IsEmpty()배열이 비어있는지 확인Contains(Value)특정 값이 포함되어 있는지 확인Find(Value)특정 값의 인덱스 반환 (없으면 INDEX_NONE)Insert(Value, Index)특정 인덱스에 요소 삽입Sort()정렬 수행 (기본 또는 커스텀 비교 함수 사용) ▣ TArray.Add(), TArray.Emplace() 차이배열의 얼로케이터는 배열에 새 엘리먼트가 추가될 때 필요에 따라 메모리를 제공합니다. 기본 얼로케.. 2025. 6. 12.
언리얼엔진5 c++ Material Random Setting ▣ StaticLoadObject()는 에디터 밖 (런타임)에서도 사용 가능한 동적 로더입니다.배열 경로에서 /Script/Engine.Material'... 형식은 에디터 자동 복사로 생긴 경로입니다. StaticLoadObject()에는 '/Game/...' 형식만 있으면 충분합니다. (다만 문제없으면 그대로 사용해도 무방합니다.) 2025. 5. 30.
언리얼엔진5 c++ AddImpulse를 활용한 액터 생성 및 던지기 ▣ 헤더에서 Notify랑 생성할 BP 변수 선언 ▣ 코드설명StaticLoadClass 블루프린트 클래스를 런타임에 로드함 SpawnActor 액터(책)를 월드에 생성 SetSimulatePhysics(true) 물리 적용 가능하게 설정 AddImpulse * Mass 질량에 따른 일정한 속도 변화 보장 Direction + Z 벡터 위로 던지는 포물선 구현 ▣ 생성하고 AddImpulse 할 엑터 설정 ▣ Simulate Physics 활성화 AddImpulse()는 물리 시뮬레이션이 켜져 있어야만 작동합니다.▣ 설정 방법:Simulate Physics 체크 Enable Gravity 기본 켜짐 (원하면 끌 수도 있음) Mass in Kg 기본값 OK (0.1 ~ 1.0 정도 추천)Static.. 2025. 5. 30.
언리얼엔진5 c++ OnOverlapBegin, OnOverlapEnd ▣ AddDynamic() 함수는 언리얼의 멀티캐스트 델리게이트 시스템에서 동작하는 방식으로, 이때 바인딩할 함수는 런타임에 리플렉션(Reflection) 이 가능해야 하기 때문에, UFUNCTION() 매크로가 반드시 붙어 있어야 합니다. ▣ 생성자에서 Collision 지정 ▣ BeginPlay에서 바인딩 ▣ if (OtherActor->IsA(APlayerCharacter::StaticClass())) OtherActor가 APlayerCharacter 타입인지 검사합니다. 즉, 충돌된 액터가 플레이어 자신 또는 다른 플레이어 캐릭터일 경우를 걸러냅니다. IsA()는 언리얼의 RTTI 함수로 OtherActor가 지정된 클래스 타입이거나 그 하위 클래스인지 확인하는 함수입니다. 의도: 플.. 2025. 5. 28.
언리얼엔진5 c++ BehaviorTree SimpleParallel(공격 이동 동시에) ▣ Simple Parallel 노드의 구조와 동작 방식 Simple Parallel 노드는 두 개의 자식 노드를 가집니다:메인 태스크(Main Task): 왼쪽에 위치하며, 반드시 하나의 Task 노드여야 합니다.백그라운드 서브트리(Background Subtree): 오른쪽에 위치하며, 전체 서브트리 구조를 가질 수 있습니다. ▣ Immediate: 메인 태스크가 종료되면 백그라운드 서브트리를 즉시 중단합니다.Delayed: 메인 태스크가 종료되더라도 백그라운드 서브트리가 완료될 때까지 기다립니다. 2025. 5. 14.
언리얼엔진5 c++ BTService , Blackboard 변수변경 ▣ BTService를 활용하여 플레이어와 거리에 따라 전투상태 여부 설정 2025. 5. 13.
언리얼엔진5 c++ BehaviorTree Blackboard 값을 코드로 변경하여 이동하기 ▣ FVector변수를 3D Widget으로 보이게 하고 에디터에서 위치를 변경하여 해당위치로 BehaviorTree에 있는 Blackboard 값을 변경하여 이동하게 하는 코드 ▣ MakeEditWidget = "true"로 설정된 변수는 에디터에서 월드 좌표로 동작합니다. 2025. 5. 9.
언리얼엔진5 c++ 충돌한 Blueprint 함수 호출방법 ▣ 전체 작동 흐름 PlayerCharacter의 Operate() 실행SphereTrace로 충돌한 액터 중 BP_TutorialEvent를 찾음ATutorialEvent로 캐스팅OperateEvent() 호출OperateEvent() 안에서 OperateEventEvent_BP() 호출블루프린트에서 구현한 이벤트 로직 실행 (예: 문 열기, 트리거 작동) 2025. 4. 29.
언리얼엔진5 BehaviorTree, EQS 응용 ▣ Wait Wait Time설명: 이 노드가 실행되었을 때 얼마나 기다릴지를 초 단위로 설정합니다.예: 3.0으로 설정하면, AI는 이 노드에서 3초 동안 대기합니다. ▣ Random Deviation설명: 설정된 Wait Time에 무작위로 더해질 수 있는 시간의 최대값입니다.예: Wait Time이 3.0이고, Random Deviation이 1.0이면, 실제 대기 시간은 3.0~4.0초 사이가 됩니다. ▣ Task Ignore Restart Self설명: 이 옵션은 Behavior Tree가 자기 자신을 다시 시작할 때 이 Task를 무시할지 여부를 결정합니다.체크 시: 트리가 다시 시작될 때 이 노드는 건너뜁니다.일반적으로 이 옵션은 루프가 있는 Behavior Tree에서 무한 대기를 방지하는.. 2025. 4. 5.
언리얼엔진5 c++ 플레이어 방향으로 수평 회전 ▣ 플레이어의 Pawn을 가져오는 부분 UGameplayStatics::GetPlayerPawn(...)는 현재 월드에 존재하는 0번 인덱스의 플레이어 컨트롤러가 조종하는 Pawn을 반환합니다.0 → 기본 싱글플레이어라면 첫 번째 플레이어결과: PlayerPawn 변수에 플레이어 액터가 저장됩니다. ▣ 서로의 현재 위치를 가져옴 GetActorLocation() → Actor의 현재 월드 좌표를 반환합니다.ZombieLocation: 좀비의 위치PlayerLocation: 플레이어의 위치 ▣ 방향벡터 계산 (수평 2D 기준) Player - Zombie: → 좀비에서 플레이어까지 향하는 방향벡터GetSafeNormal2D():이 벡터를 정규화(Normalize) 하되,Z 축(높이)은 무시하고 XY 평면 .. 2025. 4. 5.
언리얼엔진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++ (C++에서는 정의하지 않고, 블루프린트에서 Event 노드로 구현 함수) ▣ BlueprintImplementableEvent이 함수는 블루프린트에서 '이벤트로 구현 가능한 함수'라는 뜻입니다.다시 말해, 이 함수는 C++에서는 정의하지 않고, 블루프린트에서 Event 노드로 구현합니다.Event OnFireStarted_BP 라는 노드가 블루프린트 클래스 내에서 자동으로 생성됩니다. ▣ 전체 예시 흐름 C++에서 Fire() 함수가 실행됨.Fire() 내부에서 OnPistolFireBP() 호출.블루프린트의 Event OnPistolFireBP가 반응.블루프린트에서 원하는 연출(이펙트, 애니메이션 등)을 실행. 2025. 3. 24.
언리얼엔진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 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 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++ Class, 생성자, 기본멤버함수 ▣ 클래스 (Class)클래스는 객체를 생성하는 템플릿(설계도)이다. 멤버 변수(속성)와 멤버 함수(기능)로 구성됨. 생성자(Constructor)를 이용해 멤버 변수를 초기화할 수 있음.      ▣ 생성자(Constructor)가 가장 먼저 실행됩니다.  ▣ BeginPlay()가 게임이 시작될 때 한 번 호출됩니다. ▣ Tick(float DeltaTime)이 프레임마다 실행되며 메시지가 출력됩니다. ▣ 소멸자(Destructor)가 실행되며 객체가 메모리에서 해제됩니다.  ▣ 상속하여 자식 클래스를 활용하여 부모클래스 함수를 호출해서 사용 가능 2025. 2. 8.