본문 바로가기

[ Unreal5 ]311

언리얼엔진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++ 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++ Attack(Task, Notify제작), 현재 Task확인 ▣ Notify에서 현재 Task를 저장하고 불러오기 위한 함수 선언 정의, Sound, Montage 랜덤으로 재생하기 위한 데이터 선언 및 정의 ▣ AttackTask에서 현재 Task를 전달 및 AttackTrace 정의 , zombie에 있는 소리재생, 애니재생 ▣ AttackNotify에서 zombie에 Take가 AttackTask라면 AttackTrace 호출 애니메이션에 notify추가 2025. 5. 12.
언리얼엔진5 c++ BehaviorTree Blackboard 값을 코드로 변경하여 이동하기 ▣ FVector변수를 3D Widget으로 보이게 하고 에디터에서 위치를 변경하여 해당위치로 BehaviorTree에 있는 Blackboard 값을 변경하여 이동하게 하는 코드 ▣ MakeEditWidget = "true"로 설정된 변수는 에디터에서 월드 좌표로 동작합니다. 2025. 5. 9.
언리얼엔진5 c++ AI Base 상속 기본 설계 ▣ ZombieBase.h ▣ ZombieBase.cpp - 애니메이션블루프린트, 매쉬, 크기 세팅 ▣ Normal.h, cpp - AIController 연결 ZombieBase 부모클래스 ▣ AIController.h, cpp - BehaviorTree, Blackboard 연결 ▣ Animinstance.h, cpp 2025. 5. 8.
언리얼엔진5 c++ 충돌한 Blueprint 함수 호출방법 ▣ 전체 작동 흐름 PlayerCharacter의 Operate() 실행SphereTrace로 충돌한 액터 중 BP_TutorialEvent를 찾음ATutorialEvent로 캐스팅OperateEvent() 호출OperateEvent() 안에서 OperateEventEvent_BP() 호출블루프린트에서 구현한 이벤트 로직 실행 (예: 문 열기, 트리거 작동) 2025. 4. 29.
언리얼엔진5 c++ TextBlock FText ▣ 코드설명FText는 화면에 표시할 수 있는 지역화(Localization) 가능한 텍스트 타입입니다.FText::AsNumber(int32) 함수는 정수를 사람이 읽을 수 있는 텍스트(FText)로 변환합니다.여기서 PlayerID와 PlayerScore를 각각 변환해서 PlayerIDText, PlayerScoreText라는 FText 변수에 저장합니다. FText::Format()은 포맷 문자열에 값을 채워 넣는 함수입니다.FText::FromString(TEXT("ID: {0} 점수: {1}")) 이 부분은 포맷 템플릿을 만듭니다. 여기서 {0}은 첫 번째 인자(PlayerIDText)가 들어가고, {1}은 두 번째 인자(PlayerScoreText)가 들어갑니다.최종적으로 "ID: 123 점수.. 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++ 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++ 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.