전체 글690 언리얼엔진5 c++ ::StaticClass(), GetClass(), TSubclassOf<>, Cast<>, GetOwningActor() 차이 ▣ ::StaticClass() 정적 클래스 메타데이터(UClass*) 반환 - 객체 없어도 호출 가능Unreal 엔진은 실행될 때, 모든 UCLASS()가 붙은 클래스 정보를 리플렉션 시스템에 등록합니다.따라서 어떤 클래스든 그 클래스의 UClass는 항상 전역적으로 존재합니다.ACharacter::StaticClass() → "ACharacter라는 설계도 객체(UClass*)"를 달여기서 반환되는 건 “실제 캐릭터 객체”가 아니라, “클래스 정보가 담긴 정적 싱글톤”이에요.주로 클래스 비교, SpawnActor에 사용❌ 멤버 접근 불가 (UClass는 설계도일 뿐) ▣ 코드 설명UClass* PawnClass = APawn::StaticClass(); APawn* NewPawn = GetWorld.. 2025. 8. 28. 언리얼엔진5 c++ UStaticMeshComponent와 USkeletalMeshComponent 같이 받아오기 ▣ std::initializer_listC++11부터 도입된 특수한 템플릿 클래스함수의 매개변수에 사용하면, 중괄호 {}로 감싼 여러 값을 배열처럼 전달할 수 있게 함전달된 값은 내부적으로 읽기 전용 배열처럼 작동 ▣ UPrimitiveComponent*란?UPrimitiveComponent는 언리얼 엔진에서 UStaticMeshComponent와 USkeletalMeshComponent의 공통 부모 클래스입니다. 따라서 아래 둘 모두를 포함할 수 있습니다:UStaticMeshComponent*USkeletalMeshComponent* ▣ 언제 사용하나요?여러 컴포넌트를 함수에 전달 TArray 없이 {}로 깔끔하게 전달 컴포넌트 수가 고정되어 있고 변경되지 않을 때 initializer_list는 가.. 2025. 8. 27. 언리얼엔진5 c++ #pragma region과 #pragma endregion #pragma region과 #pragma endregion은 C++에서 코드 블록을 논리적으로 접거나 그룹화할 수 있도록 해주는 전처리기 지시문입니다. 이는 컴파일러에 영향을 주지 않으며, IDE(통합 개발 환경), 예를 들어 Visual Studio와 같은 툴에서 코드의 가독성을 높이고 정리하는 데 유용합니다. ▣ 사용 목적긴 코드나 클래스를 논리적 블록으로 나누어 접었다 펼 수 있게 해 줍니다.협업 시, 코드를 더 읽기 쉽게 정리할 수 있습니다.특히 Unreal Engine 5의 C++ 클래스는 코드량이 많기 때문에 유용합니다. ▣ 기본 문법 #pragma region 블록_이름 // 여기에 묶고 싶은 코드들 #pragma endregion ※ #pragma region 뒤에 이름을 붙이면 .. 2025. 8. 21. 언리얼엔진5 SkeletalMesh에 Material로 Outline 만들기 ▣ Material 생성 (맨 오른쪽 이미지) 설명: 언리얼 콘텐츠 브라우저에서 마우스 우클릭 → "Material"을 선택하여 새로운 머티리얼 에셋을 생성합니다.기능: 새로 만든 머티리얼(M_Outline 등)에 원하는 효과(아웃라인, 발광 등)를 직접 구성할 수 있습니다. ▣ Material 기본 세팅 (오른쪽에서 두 번째, Details 패널) 설명: 새로 생성한 머티리얼을 더블클릭하여 에디터를 열고, Details 패널에서 아래와 같이 세팅합니다.Material Domain: SurfaceBlend Mode: MaskedShading Model: UnlitTwo Sided: 체크Cast Ray Traced Shadows: 체크(필요시) 기능:Unlit: 라이팅 영향 X, Emissive로만 색.. 2025. 8. 5. 언리얼엔진5 c++ 전위연산자와 후위연산자 차이 ▣ 전위연산자와 후위연산자란? 증가/감소 연산자(++, --) 사용 시, 연산자의 위치에 따라 동작이 다름 변수 앞에 붙이면 → 전위(pre) 연산자변수 뒤에 붙이면 → 후위(post) 연산자 1. 전위연산자 (Pre-increment/decrement) 형식: ++a 또는 --a 의미:먼저 변수 값을 증가(또는 감소)그 증가(감소)된 값을 사용 예시int a = 5; int b = ++a; // a는 먼저 6이 되고, b에도 6이 들어감 연산 후: a = 6, b = 6 2. 후위연산자 (Post-increment/decrement) 형식: a++ 또는 a-- 의미:먼저 변수의 기존 값을 사용그 후에 변수 값을 증가(또는 감소) 예시 int a = 5; int b = a++; // b에는 먼저 a .. 2025. 7. 28. 언리얼엔진5 c++ 주소 vs 레퍼런스 차이 1. 주소(address) 정의: 메모리에서 데이터가 저장된 정확한 위치(숫자값). ▣ 표현: 포인터(pointer)로 표현됨 예) int*, AActor*, UObject* ▣ 용도:다른 변수나 객체의 메모리 위치를 저장하거나 전달할 때 사용주소를 이용해서 데이터에 직접 접근(역참조) 가능 ▣ 문법 예시:int a = 10; int* pA = &a; // a의 주소값을 pA에 저장 *pA = 20; // pA가 가리키는 곳에 20을 저장 2. 레퍼런스(reference) 정의: 변수나 객체를 가리키는 다른 이름(alias) (내부적으로 주소를 사용하지만, 문법적으로는 주소를 직접 다루지 않음) ▣ 표현: 레퍼런스 타입으로 선언 예) int&, AActor&, FVector& ▣ 용도:값을 복사하.. 2025. 7. 28. 언리얼엔진5 c++ 생성 시 폴더 추가할 때 오류 해결방법 ▣ 왜 이런 오류가 발생하는가? Unreal Engine에서 C++ 클래스를 만들면, 자동으로 빌드 설정에 폴더 경로가 추가되지 않는 경우가 있다새 클래스를 만들 때, 예를 들어 GameModes/GameMode.h처럼 하위 폴더에 클래스를 만들면 실제 파일은 Source/프로젝트명/GameModes/GameMode.h에 저장됩니다.하지만, Unreal Build System(UBT)는 기본적으로 Source/프로젝트명까지만 헤더 파일 경로로 인식합니다.만약 C++ 코드에서#include "GameModes/GameMode.h" 이렇게 경로를 지정할 경우, .Build.cs 파일의 PublicIncludePaths에 GameModes 폴더 경로가 추가되어 있지 않으면 빌드 시스템이 해당 파일을 못 찾게 .. 2025. 7. 11. 언리얼엔진5 c++ 프로젝트 설정 ▣ 시작 프로젝트로 설정 무엇을 하는 과정인가? 솔루션 탐색기에서 메인 게임 프로젝트(예: ThirdPersonTest)를 “시작 프로젝트로 설정”하는 단계입니다. ▣ 왜 하는가? 솔루션에는 여러 프로젝트(플러그인, 엔진 등)가 포함되어 있을 수 있는데, Visual Studio에서 디버깅(실행) 버튼을 누를 때 어떤 프로젝트를 기준으로 실행할지 지정해야 합니다.Unreal Engine의 C++ 개발에서는 반드시 내가 작업할 메인 게임 프로젝트를 시작 프로젝트로 지정해야 에디터를 실행하거나 게임을 정상적으로 빌드할 수 있습니다.만약 잘못된 프로젝트(예: 플러그인, 엔진)를 시작 프로젝트로 지정하면 빌드/실행 시도가 실패하거나 원하지 않는 결과가 나옵니다. ▣ 빌드 구성 선택(Development E.. 2025. 7. 11. 언리얼엔진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++ 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. 이전 1 2 3 4 ··· 29 다음