묻고 답해요
152만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
순위 정보를
불러오고 있어요
-
미해결[입문자를 위한 UE5] Part1. 언리얼 엔진 블루프린트
레벨 블루프린트 제작 후 실행 시 메시지 로그- 맵체크 창 뜨는 경우
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! 레벨 블루프린트 제작 후에 실행 을 눌렀는데 메시지 로그 -맵체크가 뜨고 창을 닫으니까 레벨에 화면이 검은색으로 보입니다. 블루프린트로 print text 작성한 부분은 화면에 잘 뜨는데 레벨이 아예 검은색으로 보이는데 혹시 레벨 제작 과정에서 문제가 있었던 걸까요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
강의 외 질문입니다.
제가 현재 NPC가 플레이어가 공격 범위 내에 없으면 쫓아오게 하였습니다. 이때 NPC에서 공격범위의 값을 바꾸고 싶어서 UPROPERTY로 변수를 선언을 하였습니다.커스텀 데코레이터에서 공격범위 값을 가져오기 위해 Interface를 만들어서 캐스팅을 해주었습니다.하지만 플레이를 해보면 Interface가 없다고 나옵니다. 뭐가 잘못된 것일까요..? class LIFEOFLUCK_API IOLNPCInterface { GENERATED_BODY() // Add interface functions to this class. This is the class that will be inherited to implement this interface. public: virtual float AttackRange() = 0; };#include "CoreMinimal.h" #include "Character/OLCharacterBase.h" #include "Interface/OLNPCInterface.h" #include "OLNPCBasic.generated.h" UCLASS() class LIFEOFLUCK_API AOLNPCBasic : public AOLCharacterBase, public IOLNPCInterface { ... protected: virtual float AttackRange() override; UPROPERTY(EditAnywhere, Category = "AttackRange") float AttackRangeValue = 160; // 공격 범위 값 };float AOLNPCBasic::AttackRange() { return AttackRangeValue; }#include "AI/BTDecorator_AttackRange.h" #include "AIController.h" #include "BehaviorTree/BlackboardComponent.h" #include "Interface/OLNPCInterface.h" DEFINE_LOG_CATEGORY(Not); UBTDecorator_AttackRange::UBTDecorator_AttackRange() { } bool UBTDecorator_AttackRange::CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const { Super::CalculateRawConditionValue(OwnerComp, NodeMemory); APawn* NPC = OwnerComp.GetAIOwner()->GetPawn(); if (NPC == nullptr) { UE_LOG(Not, Error, TEXT("No NPC")); return false; } FName PlayerName = TEXT("Target"); APawn* Player = Cast<APawn>(OwnerComp.GetBlackboardComponent()->GetValueAsObject(PlayerName)); // 타겟인 플레이어 가져오기(캐스팅하기) if (Player == nullptr) { UE_LOG(Not, Error, TEXT("No Target")); return false; } IOLNPCInterface* NPCInterface = Cast<IOLNPCInterface>(NPC); // NPC가 인터페이스를 생성한 경우 캐스팅이 됨 if (NPCInterface) { UE_LOG(Not, Error, TEXT("No NPCInterface")); return false; } float Distance = FVector::Dist(NPC->GetActorLocation(), Player->GetActorLocation()); // NPC와 플레이어 사이의 거리 구하기 float AttackRange = NPCInterface->AttackRange(); bool AttackRangeResult = Distance <= AttackRange; UE_LOG(LogTemp, Display, TEXT("Distance: %f"), Distance); UE_LOG(LogTemp, Display, TEXT("AttackRange: %s"), AttackRangeResult ? TEXT("True") : TEXT("False")); return AttackRangeResult; }
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
프로젝트명 변경 또는 이주 시 발생하는 문제를 여쭤보고 싶습니다.
프로젝트명을 변경할 때 겪는 문제들로 인해 삭제하고 다시 생성하느라 시간을 많이 소비하고 있습니다.제가 겪고 있는 문제점들을 짚어보겠습니다! 공식적으로 편리하게 이주 또는 프로젝트명 변경을 할 수 있는 방법을 알고싶습니다.버전은 5.4.4 사용 중입니다. 기존 프로젝트명: ArenaBattle변경한 프로젝트명: BEAD 프로젝트명 변경 이후 기본적으로 진행한 작업들DefaultEngine.ini에 Redirect할 경로들 모두 적은 후 .uasset 데이터들 옮기기소스코드 내 모든 모듈명 교체, .uproject 명세서 내 모듈명 교체, Build.cs 내 모듈명 교체 (버전 확인도 제대로 수행)Saved, Intermmidate, DerivedDataCache, Binaries, 솔루션 삭제 후 generate -> Rebuild에디터 내 Content 폴더 우클릭 > Update Redirector ReferencesC++ 클래스 생성자 내 참조하는 경로 모두 변경한 프로젝트 경로로 설정 & 에디터의 모든 블루프린트 내 Parent 경로 Redirect한 것으로 적용된 것 확인에픽게임즈 라운처 > 언리얼 엔진 > 검증 수행 질문 모음1. Redirect를 시도했는데도 불구하고 "행동 트리"와 "데이터 애셋"의 경우, 참조하는 클래스가 새로운 프로젝트명의 클래스를 찾지 못하는 문제시도한 내용:Redirect 사용 시 Widget Blueprint 등은 Parent 경로는 잘 찾았으나 Behavior Tree 내 클래스 경로와 데이터 애셋의 경로는 제대로 찾지 못해 삭제하고 다시 생성해야 하는 경우가 발생했습니다. (물론, Redirect 작성 이후 .uasset을 옮기고 캐시 삭제 및 generate 수행)// DefaultEngine.ini // [CoreRedirects] +ClassRedirects=(OldName="/Script/ArenaBattle.ABComboActionData", NewName="/Script/BEAD.ABComboActionData") // 애셋 데이터 +ClassRedirects=(OldName="/Script/ArenaBattle.BTService_Detect",NewName="/Script/BEAD.BTService_Detect") // 행동트리 ... 이하 생략 2. Animation Montage의 경우, 정보들은 그대로 잘 옮겨져 Notifies도 제대로 배치되어 있지만삭제하고 다시 설치하지 않으면 C++ 클래스 내 Notify 함수가 호출되지 않는 현상아래 AM_ComboAttack 몽타주는 Redirect를 사용하여 정상적으로 열리고, 모든 내용들이 잘 배치가 되어 있으나아래 AttackHitCheck 노티파이를 삭제하고 다시 배치하지 않으면 C++ Notify 함수가 재생되지 않는 현상이 발생합니다. 3. 기존 모듈명은 이미 수정하여 어느 곳에도 존재하지 않는데 자꾸 VerifyImport: Failed to find script package for import object 'Package/Script/ArenaBattle' 경고가 뜨는 현상모든 소스코드와 명세서, 그리고 블루프린트 내에도 이전 모듈명과 관련된 내용이 없는데도 엔진을 실행하면 아래 경고문이 나옵니다. (당연히 캐시 삭제와 generate, rebuild, update redirector references 수행했습니다.)물론, BP_ABGameMode.uasset을 다시 지우고 생성하면 해결되겠지만위의 질문들을 포함해서 Redirect를 사용하고 코드를 전부 수정해도 자꾸 적용이 안되는 게 생기고 아래 오류가 생기니 새로 삭제하고 다시 만들어야 하는 번거로움이 있습니다 ㅜ 해결방법을 알고싶습니다.LogLinker: Warning: [AssetLog] D:\4.Unreal\BEAD\Content\ArenaBattle\Blueprint\BP_ABGameMode.uasset: VerifyImport: Failed to find script package for import object 'Package / Script / ArenaBattle'
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
7강 정리했는데 검토부탁드려요
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
5강 정리해봤는데 검토부탁드립니다.
간략하게 5강 실습내용들을 정리해봤는데 검토부탁드려요.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
입력
입력에 대한 처리를 SetupPlayerInputComponent()를 통해 직접 정의한 함수와 바인딩할 수 있는데, 입력 키는 어떻게 설정할 수 있나요? 인풋 액션 클래스를 따로 정의하면 가능한 일인가요? 현재 블루프린트의 인풋 클래스를 사용해서라고 예상중입니다. 또한, CharacterBase에 있는 이 코드는 이 클래스를 상속받는 Pawn의 고유 값으로 설정되는건가요? 하위 클래스들에게 독립적으로 적용시키도록 할 수도 있는건가요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
CharacterPlayer::Move()
안녕하세요. 강의 37분정도까지 따라서 소스 작성하고 실행을 해봤는데요.캐릭터의 움직임이 A,D가 앞뒤이고, W,S가 좌우로 움직이더라구요 혹시 Move함수에서 뭘 바꿔야하나 생각해서 AddMovementInput(ForwardDirection,MovementVector.X);AddMovementInput(RightDirection,MovementVector.Y);부분을 AddMovementInput(ForwardDirection, MovementVector.Y); AddMovementInput(RightDirection, MovementVector.X);로 바꾸니 제대로 동작하더라구요. 혹시 이유가 뭔지 알수있을까요?
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
세션8 우선순위 큐 pop함수의 Predicate 적용 관련 질문이 있습니다.
pop 함수를 보면 if (right < (int)_heap.size() && predicate(heap[next], _heap[right]))인 left와의 비교에서 나온 결과 값을 비교하는 부분에만 predicate를 적용하였는데 위에 left와 비교하는 부분은 둘 중 더 큰 값을 next에 넣는게 목적인 코드입니다.더 작은값을 찾을때 문제가 생길 수 있을것이라 생각이 되는데 문제가 생기지 않아 의문점이 생겨 질문 드립니다.left쪽엔 predicate 비교를 하지 않아도 되는 이유가 무엇일까요?
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
4강의 CreateTask 함수 질문입니다,
CreateTask 함수가 C++과 다르게 BP에서는 호출 시 내부에서 자동으로알아서 ReadyForActivation함수를 호출해주네요.C++에서는 ReadyForActivation함수 호출 전에 맴버변수들을 초기화할 수 있지만BP에서는 이것이 제한될까요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
Enhanced Input Mapping Context 에서 축(Axis) 관련 질문드립니다.
안녕하세요 Enhanced Input Mapping Context 에서 Input Action 을 바인딩하는 부분에서 W,S 키를 눌러 전진, 후진을 처리하는 IA 에서는 Vector2D Y 위치에 값을 대입하고 A,D 좌우에는 X 값에 값을 대입하는데요 (Swizzle Input Axis Value 를 이용해서) 언리언 엔진에서 character 를 살펴보면 좌표계는 왼손 좌표계이고 캐릭터가 앞을 바라보는 부분이 X 축에 위치하고 우측이동이 Y 축인데 왜 Y 위치에 전진 관련 값을 처리하도록 넣는 건가요?void AABCharacterPlayer::Move(const FInputActionValue& Value) 함수에서도 전진은 X 축으로const FVector ForwardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);AddMovementInput(ForwardDirection, MovementVector.X);좌우는 Y 축으로 처리하는데const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);AddMovementInput(RightDirection, MovementVector.Y); 처리 과정이 궁금합니다.
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
섹션9 함수 포인터 관련 질문입니다.
영상 초반 내용을 보면 using FuncPtr = void();는 잘 사용하지 않는 문법이라고 하고, 뒤이어 나오는using FuncPtr = void(*)();와 같은 형식을 자주 사용한다고 했는데 동일하게 동작한다면 오히려 앞쪽이 더 편한 것 아닌가요? (*)를 추가하는 이유가 단순히 포인터임을 표시해주기 위함 인가요?
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
2강에서 TimerAction함수 질문입니다.
주석으로 코드 설명을 적어놓았는데요.이게 맞을까요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
캡슐 드로우 관련 질문입니다.
수업 자료 중에 Half Height가 캡슐의 반구 부분을 제외한 몸통 부분의 절반 높이라고 표현되어있고, 수업 코드상 수치도 그렇게 계산 된 것으로 보입니다.하지만 아무리 테스트해 봐도 판정 범위와 다른것 같아 테스트 결과와 함께 질문드립니다. 위 사진은 수업 코드와 그 실행 결과입니다.NonPlayer의 캡슐와 닿지 않아도 충돌 처리 된 모습입니다. 아래 사진은 Half Height에 캡슐의 반구 크기를 포함 시킨 수치를 적용한 코드와 그 실행 결과입니다. 그려진 캡슐과 정확히 겹칠 때 충돌 처리된 모습입니다.그래서 아래의 자료에서 초록색으로 표기한 길이가 Half Height인지, 혹은 수업 자료의 Half Height는 맞지만 DrawDebugCapsule함수의 인자만 초록색 표기된 부분으로 사용하는 것인지 질문드립니다!!
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
스태틱메시 Copy Reference할 때 '를 삭제하지 않는 이유
안녕하세요.Fountain 스태틱 메시를 Copy Reference해서 붙여넣을때 왜 저번과 다르게 '를 빼지않고 그대로 사용하나요?추가로 비주얼 스튜디오에서 ctrl F5로 언리얼이 실행이 안되고 디버그 설정을 하라는 오류가 발생할 땐 어떻게 해야하나요?
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
5.3 이후 버전 쓰시는 분들은 Granted Tags가 안나올때 해결방법
질문&답변 게시판에 이러한 글을 작성해서 죄송합니다.저는 5.5버전으로 공부중인데 강의 중 39분 쯤에 Granted Tags에 태그 추가하는 부분이 있었는데 5.3버전 이후부터는 없어가지고 저가 찾은 방법을 나중에 저 처럼 공부하시는 분들이 해당 부분에 막힐까봐 여기서나마 적고싶었습니다. 문제가 된다면 해당 글을 삭제하겠습니다.5.3 이후 버전에서는 Tags가 Components에 통합되면서 Component를 이용해서 추가해야합니다.5.3버전일 경우 Components - "Target Tags Gameplay Effect Component"를 추가해서 tag를 넣으시면 되고5.4,5.5버전일 경우 Components - "Grant Tags to Target Actor"를 추가해서 tag를 넣으시면 됩니다.
-
미해결[입문자를 위한 UE5] Part5. 언리얼 엔진 VR
GrabComponent 강의에서
SphereTraceForObjects-OutHitReturnValue랑 BreakeHitResult랑 노드 연결이 안됩니다.... 정확히 일치되는 구조체만 호환 간주됩니다 파생구조체는 허용되지 않습니다 라는 알람이 뜨네요Get Component By Class - Return Value 노드랑 로컬변수 LocalGrabComponent도 연결이 안됩니다....LocalGrabComponenet랑 ReturnNode-NewParam도 저는 연결이 안됩니다..(영상 22:00 참조)
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
Git에서 다운받은 파일중 일부가 에디터에서 인식되지 않습니다.
안녕하세요.저번 강의에서 Git에서 다운받은 ArenaBattle폴더를 새로 만든 프로젝트의 Content폴더로 옮겨 주었을 때, 에디터에서 인식은 했으나 폴더에는 존재하는 Step1이 에디터에서는 나타나지 않는 현상이 있었습니다.이번 강의에서도 진행도중 BluePrint에서 일부 엑터만 에디터에 표시됩니다.무슨 문제가 있는것인가요??현재 언리얼 버전은 5.1 사용중입니다!
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
콤보 어택
수업시간에 배운걸 토대로 콤보 어택마다 데미지를 다르게 구현하고 싶어서 코드를 작성하고 있습니다.float AOLCharacterBase::TakeDamage(float DamageAmount, struct FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser) { if (CurrentComboAttack == 1) { Hp = FMath::Clamp(Hp - DamageAmount, 0.0f, MaxHp); // 체력 업데이트 UE_LOG(LogTemp, Warning, TEXT("Damage1 = %f"), DamageAmount); } else if (CurrentComboAttack == 2) { Hp = FMath::Clamp(Hp - DamageAmount*2, 0.0f, MaxHp); // 체력 업데이트 UE_LOG(LogTemp, Warning, TEXT("Damage2 = %f"), DamageAmount*2); } else if (CurrentComboAttack == 3) { Hp = FMath::Clamp(Hp - DamageAmount * 3, 0.0f, MaxHp); // 체력 업데이트 UE_LOG(LogTemp, Warning, TEXT("Damage3 = %f"), DamageAmount * 3); } UE_LOG(LogTemp, Warning, TEXT("Hp = %f"), Hp); // 체력이 0 이하인 경우 if (Hp <= 0.0f) { Dead(); // 죽었으니 함수 호출 UE_LOG(LogTemp, Error, TEXT("Dead!")); } return DamageAmount; }TakeDamage에서 CurrentComboAttack 값에 따라 데미지를 다르게 하려고 위 코드와 같이 작성을 했는데 로그도 전혀 나오지 않습니다. 콤보 어택 데이터에 데미지 값을 추가하여 값을 가져오면 콤보마다 데미지가 다른게 잘 되는데, 위 코드와 같이 작성하면 왜 안되는지 궁금합니다.. CurrentComboAttack은 전역변수로 선언되어있습니다.
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
SetWaitingOnAvatar함수의 호출 위치에 따라 영향을 주는지 궁금합니다.
50:24쯤에 Ability Task의 Activate 함수 작성 구간에서void UABAT_Trace::Activate() { Super::Activate(); SpawnAndInitializeTargetActor(); FinalizeTargetActor(); SetWaitingOnAvatar(); }로 하셨는데void UABAT_Trace::Activate() { Super::Activate(); SetWaitingOnAvatar(); SpawnAndInitializeTargetActor(); FinalizeTargetActor(); }이렇게 SetWaitingOnAvatar함수를 먼저 Task수행전에 호출해도 괜찮은지 궁금합니다.SetWaitingOnAvatar 함수를 호출이유가 해당 작업이 아직 안끝났다는걸 ASC에게 알려주기 위해 Waiting상태로 만든다고 들어서 이게 가능하다 생각되고 실제로도 돌려보니 별 다른점이 없어서 물어봅니다.
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
exercise_A 번 문제 해결방법에 대한 질문.
디버깅 참고 답안의 exercise_A 번 문제에서 knight (Knignt*형) 의 포인터 주소를 넘겨주는 이중포인터로 작성해서 해결?(일단 터지지는 않았습니다) 했는데 이런 방법은 안되는 건가요?
주간 인기글
순위 정보를
불러오고 있어요