inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

다각도 바향 전환

미해결

[입문자를 위한 UE5] Part2. 언리얼 엔진 2D 게임 개발 입문

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의 듣고 실습도 해보고 강의의 내용을 토대로 소스들을 직접 제작하여 만들어 보다가 궁금한게 생겼습니다. 애니메이션 위, 아래, 좌, 우 방향 전환은 알겠는데 대각선이나 8방향이나 16방향으로 방향 마다 다른 플립북을 배치 할려면 어떻게 블루프린트 를 생성해야할까요? 강의랑 다른 내용이라 인터넷에서 찾아보고는 있는데 언리얼엔진 내용은 너무 찾기 힘드네요

  • unreal-engine
  • ue-blueprint
jmh4931 댓글 1 좋아요 0 조회수 132

[파일 입출력] 28:50

미해결

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버

28:20 영상을 보면 'Tilemap' 빈 파일을 만들지 않고 저장이 되는 모습입니다. 그런데 제가 진행을 하면 위 이미지와 같이 assert(file != nullptr);에 걸립니다. 혹시 28:50 같이 'Tilemap' 빈 파일을 만들고 타일맵 저장을 진행해야 하는 게 맞는 방법인지 알고 싶어 글 올립니다.

  • c++
  • 네트워크
  • ue-blueprint
  • 게임수학
  • windows-api
wooni 댓글 1 좋아요 0 조회수 121

[이벤트와 조건 변수] 강의에서 unique_lock 사용 이유?

미해결

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버

17분 쯤 unique_lock을 사용하였는데 별도의 인자로 std::defer_lock , std::try_to_lock , std::adopt_lock 등 을 넘겨주지도 않는데 굳이 unique_lock을 사용하는 이유가 있을까요? 그냥 lock_guard를 써도 되지 않나요?

  • c++
  • 네트워크
  • ue-blueprint
  • 게임수학
  • windows-api
김성범 댓글 1 좋아요 0 조회수 166

프로그래밍과 관련된 것은 아니지만 폴더를 만드는 방식에 대해서 궁금한 점 질문드립니다.

미해결

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

안녕하세요, 교수님. 강의 중에 게임레이어, 미들웨어레이어, 데이터레이어에 대해서 말씀해주셨는데 폴더도 그에 맞춰서 만들어도 되는지 궁금합니다. /Source/ArenaBattle/Game/Character /Source/ArenaBattle/Interface /Source/ArenaBattle/Middleware/Item /Source/ArenaBattle/Data/Character 이런 식으로 나눠놓아도 될런지 알고 싶습니다.

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
최인규 댓글 1 좋아요 0 조회수 124

28:50 에서 SetPercent 함수와 관련하여 궁금한 점이 있습니다.

해결됨

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

파트2의 10강 28:50 에서, if 문에 "ABOpponentCharacter->SetLevel(CurrentStageNum);" 구문을 추가로 넣은 후 게임을 진행하면서 다음 두번째 적이 스폰될 때, HpBar가 100/150의 비율로 렌더링이 되는 것이 이해가 잘 가지 않습니다. "HpProgressBar->SetPercent" 함수가 HpProgressBar의 비율을 계산하여 렌더링 하는것이 맞다면, 적이 스폰될 때 StatComponent에서의 beginplay를 통해 BaseStat.MaxHp 가 100 이 된 후, 위젯의 "SetupCharacterWidget" 이 호출되어 순서대로 "SetMaxHp"를 통해 위젯의 MaxHp 또한 100 이 되고 끝으로 "SetPercent(NewCurrentHp / MaxHp);" 를 실행하여 100/100 비율로 체력바가 올바르게 갱신되어 렌더링되는 것 까지는 이해했습니다. 근데 적 Level이 2가 될 때, 스텟컴포넌트의 BaseStat.MaxHp 가 "28:50"에서 추가했던 "SetLevel(CurrentStageNum);" 으로 인해 150 으로 갱신되고, 문제는 그 이후에 아래와 같은 두 추가적인 과정이 없이 어떻게 게임상에서 보이는 체력바의 비율이 100/150 의 비율로 갱신이 될수 있던 것인지 궁금합니다. HpBarWidget->SetMaxHp(Stat->GetTotalStat().MaxHp); 구문을 다시 실행시켜서 HpBarWidget 의 MaxHp 변수를 150 으로 갱신시켜주고 OnHpChanged.Broadcast(CurrentHp); 를 명시적으로 호출하여, HpProgressBar->SetPercent(NewCurrentHp / MaxHp); 를 실행시켜서, 갱신이 필요한 CurrentHp의 값인 100과, 1.을 통해 150 으로 갱신된 MaxHp 두 값의 100/150 비율이 비로소 렌더링이 된다. 28:50 코드 이후에 위 두가지 코드를 실행하는 구문이 명시적으로 추가되지 않다면, ABHpBarWidget의 MaxHp는 여전히 100일 것이며, 150으로 갱신되었다 하더라도 여전히 UpdateHpBar를 호출하지 않았으므로 SetPercent(NewCurrentHp/MaxHp)를 호출하지 못하여 100/100의 비율로 렌더링이 되었어야 한다고 생각이 드는데, 실제론 전혀 그렇지 않고 스텟컴포넌트에서 변경된 MaxHp가 위젯의 MaxHp에도 자동으로 적용되어 100/150의 올바른 비율로 갱신되는 이유가 궁금합니다. log 를 한번 찍어보았는데, 저는 "GetWorld()->SpawnActor" 로 월드에 적이 스폰 된후 InitWidget 을 통해 위젯이 생성된 다음, 곧바로 nativeconstruct 가 호출될 것으로 예상했으나 다음 구문인 "ABOpponentCharacter->SetLevel(CurrentStageNum);" 이 실행되고, 이 구문이 실행이 완료되고 나서야 뒤늦게 위젯의 nativeconstruct 가 실행됩니다. 만약 이 흐름이 버그가 아니라면, 뒤늦게 nativeconstruct가 호출됨으로써 HpBarWidget->SetMaxHp(Stat->GetTotalStat().MaxHp); HpBarWidget->UpdateHpBar(Stat->GetCurrentHp()); 위 두 구문이 실행이 되는 것이므로 지금 보이는 체력바의 모습이 비로소 이해가 됩니다. 근데 이 nativeconstruct 의 호출타이밍이 왜 InitWidget 의 실행이 끝난 후 바로 호출이 되지 않고, 그 다음 구문인 "ABOpponentCharacter->SetLevel(CurrentStageNum);" 이 실행이 끝나고 나서야 호출이 되는 것인지 궁금합니다. 혹시 몰라 해당 프로젝트를 깃허브에 올려놓았습니다. https://github.com/jaebyoung/MyArenaBattle_2_10 (업로드가 처음이라 제대로 올라간 것인지 모르겠습니다..)

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
hush park 댓글 2 좋아요 0 조회수 202

FTakeItemDelegateWrapper에 대한 질문입니다.

미해결

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

안녕하세요 교수님. 델리게이트를 리스트에 담아주기 위해 구조체를 이용해서 감싸주었는데, 델리게이트만으로는 리스트에 담는것이 어려운 것인지 궁금해 질문남깁니다. 예를 들어, 래퍼 없이 직접 TakeItemActions을 TArray<FOnTakeItemDelegate>로 정의하고 TakeItemActions.Add(FOnTakeItemDelegate::CreateUObject(this, &AABCharacterBase::EquipWeapon)); TakeItemActions.Add(FOnTakeItemDelegate::CreateUObject(this, &AABCharacterBase::DrinkPotion)); TakeItemActions.Add(FOnTakeItemDelegate::CreateUObject(this, &AABCharacterBase::ReadScroll)); void AABCharacterBase::TakeItem(UABItemData* InItemData) { if (InItemData) { TakeItemActions[(uint8)InItemData->Type].ExecuteIfBound(InItemData); } } 와 같이 래퍼 없이 사용하는 것입니다. 이에는 문제가 없을까요?

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
이경택 댓글 2 좋아요 0 조회수 134

bmp 파일 알파 처리 방법 질문

미해결

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버

애니메이션 강의 부분에서 알파 채널 있는 bmp파일의 경우는 어떤 함수를 사용하나요? 검색해봐도 잘 나오지 않고 강의에서 다룬다고 언급은 되어 있는데 해당 부분은 영상에 나와있지 않아서 질문드립니다.

  • c++
  • 네트워크
  • ue-blueprint
  • 게임수학
  • windows-api
레일레이 댓글 1 좋아요 0 조회수 258

길찾기 이후 이동이 동작하지 않습니다.

미해결

[입문자를 위한 UE5] Part3. 언리얼 엔진 3D 게임 개발 입문

랜덤하게 좌표 찍히는것도 확인했고 다른 설정도 모두 동일하게 잘 된거 같은데 이동을 하지 않습니다...

  • unreal-engine
  • ue-blueprint
한지윤 댓글 2 좋아요 0 조회수 333

TWeakObjecPtr 과 CG 와 관련하여 궁금한점이 있습니다.

해결됨

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

void AABStageGimmick::SpawnRewardBoxes() { for (const auto& RewardBoxLocation : RewardBoxLocations) { FVector WorldSpawnLocation = GetActorLocation() + RewardBoxLocation.Value + FVector(0.0f, 0.0f, 30.0f); AActor* ItemActor = GetWorld()->SpawnActor(RewardBoxClass, &WorldSpawnLocation, &FRotator::ZeroRotator); AABItemBox* RewardBoxActor = Cast<AABItemBox>(ItemActor); if (RewardBoxActor) { RewardBoxActor->Tags.Add(RewardBoxLocation.Key); RewardBoxActor->GetTrigger()->OnComponentBeginOverlap.AddDynamic(this, &AABStageGimmick::OnRewardTriggerBeginOverlap); RewardBoxes.Add(RewardBoxActor); } } } AActor*인 ItemActor 가 가리키는 액터가 월드에서 스폰된 후, 이것을 RewardBoxes.Add(RewardBoxActor); 구문을 통해 약참조 포인터로 참조하도록 한 후 SpawnRewardBoxes() 함수를 종료 하게 되었을 때, 강참조 역할을 했던 해당 객체의 소유권을 갖고있던 지역변수 RewardBoxActor 는 소멸하므로, 강참조 포인터가 파괴됨에 따라 소유권을 가질 능력이 없는 RewardBoxes 안의 WeakPtr 또한 GC의 수집에 의해 더이상 유효하지 않게 될것처럼 느껴지는데 실제론 그렇지 않은 것인가요? 만약 그렇지 않은것이 맞다면 이유가 무엇인지 궁금합니다.

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
hush park 댓글 1 좋아요 0 조회수 170

TSoftPtr 에 대해 질문이 있습니다.

해결됨

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

예를들어 TSoftObjectPtr로 된 TSoftObjectPtr<class USkeletalMeshComponent> 타입의 포인터는 UPROPERTY() 로 설정하게 될 경우 TObjectPtr 과 마찬가지로 GC의 자동 수거대상에서 제외되는 않고 명시적으로 참조를 해제해야만 GC가 수거하게 되나요? 그리고 TObjectPtr 과 TSoftObjectPtr 전부 UPROPERTY()로 설정하지 않을 경우, GC 시스템에 의해 자동으로 메모리가 회수당하게 되나요?

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
hush park 댓글 2 좋아요 0 조회수 347

움직임은 캐릭터에서 처리해야하나요? 컨트롤러 클래스에서 해야하나요

미해결

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

별건 아니고 단순한 궁금증이 생겨서 질문 남깁니다. 강의에서는 플레이어의 입력을 받고 움직임을 처리하는 것을 ABCharacterPlayer 클래스에서 처리하였는데요. 그렇다면 Controller는 어떨 때 사용하는건가요? 제가 강의를 봤을 때 움직임 등을 PlayerController에서 처리한다고 했는데 Character 클래스에서 처리해서 질문 남깁니다. 강의를 위해 카메라와 움직임을 하나의 클래스로 보여주신 것인지 아니면 원래 이렇게 하는지 궁금하네요

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
qmal789 댓글 2 좋아요 0 조회수 208

액터를 C++로 생성하는 이유

미해결

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

강의를 듣다가 의문이 생겨 글 남깁니다. 분수대를 만드는데 BP와 C++을 이용해서 각각 만들어봤는데 BP를 통해서 만들때는 너무 쉽고 간단하지만 C++을 사용할때는 복잡하고 초기에 해줘야하는 세팅이 너무 많은것 같아서 굳이 왜 C++을 통해서 액터를 만들어야하는가? 라는 의문이 듭니다. 가령 액터를 꾸미는? 작업은 BP로 하고 주요 로직은 C++로 작성하는게 맞지 않나 라는 생각이 드는거죠. 실제 현업에는 어떻게 사용하지는 모르겠지만, 프로그래머가 C++을 통해 맵에 배치할 모든 액터를 작성하지 않을 것 같아서 질문 드립니다. 액터를 만들때에는 왜 C++을 사용해야하는지? 만약 그렇다고 한다면 일련의 노가다와 같은 초기화 작업을 다 해야하는지? 지금까지 강의를 들었을 때 제가 내린 스스로의 해결법?은 C++ A클래스를 만들고 헤더 파일에 UPROPERTY(VisibleAnywhere, BlueprintReadWrite)를 통해 프로퍼티를 열어둔 상태에서 B라는 블루프린트 클래스를 만들어서 A를 상속 받은 후 에디터를 통해 작업하는 것 입니다. 이것도 어떻게 생각하시는지 궁금합니다.

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
qmal789 댓글 2 좋아요 0 조회수 238

9강 30:13 에서 빌드 에러 부분입니다.

해결됨

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

강의 내용에는 #include Engine/OverlapResult.h" 를 포함하지 않음에도 불구하고 빌드후 에디터 실행까지 이루어지지만, 현재 버전에서는 어째서인지 깃허브 파일에서 추가해놓은 위 헤더를 추가해야만 빌드가 실행이 되는 것으로 보입니다. .

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
hush park 댓글 3 좋아요 1 조회수 291

ABCollision.h

미해결

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

ABCollision.h 에서 CoreMinimal 헤더파일의 경로를 자꾸 못잡아주네요. 메모장에서 .h 바꿔서도 해보고, 깃허브에서 ABCollision.h 파일을 옴기고 generate 다시 해봐도 ABCollision.h 파일에서 CoreMinimal 경로를 못찾네요 어떻게 해줘야 할까요

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
lionhas99 댓글 2 좋아요 0 조회수 170

재장전 관련 공부 중, 궁금한 점이 있어 질문 올립니다.

미해결

[입문자를 위한 UE5] Part1. 언리얼 엔진 블루프린트

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요, 언리얼 블루프린트를 배우기 위해 강의 신청한 학생입니다. 재장전 수업 관련 블루프린트를 배치하던 중에서 조건과 실행 내용의 배치 순서에 따라 결과 값이 다르게 나오던데 이유가 제가 생각하는 이유 때문인지 아니면 다른 이유 때문인지 궁금합니다. 1) 각 블루프린트 이미지 1-1) 1번 블루프린트 : 브랜치(조건) -> 실행문 배치 1-2) 2번 블루프린트 : 실행문 -> 브랜치(조건) 배치 2. 결과 값이 다른 이유 개인 추측 내용 2-1) a. 1번 블루프린트의 경우, 조건을 우선적으로 판단 -> 이후에 총알 감소 실행문 절차 진행 b. 위 과정에서 1발이 남았을 경우, 실행문보다 조건문이 더 빠르므로 아직 해당 조건의 'True'에 적합하지 않음 c. 그에 따라 'False' 절차 진행, 1-1 절차값이 0이므로 0을 출력 d. 이후, 추가적인 절차 진행 시, 조건의 'True'에 적합하여 '총알이 없습니다!' 텍스트 출력 2-2) a. 2번 블루프린트의 경우, 실행을 우선적으로 진행 -> 이후에 조건을 판단 b. 위 과정에서 1발이 남았을 경우, 실행문이 더 빠르므로 1-1 절차 진행 및 절차값 0 제공 c. 이후, 조건문의 조건에 적합함에 따라 'True' 절차인 '총알이 없습니다!' 텍스트 출력

  • unreal-engine
  • ue-blueprint
ardun 댓글 2 좋아요 0 조회수 197

OnHpChanged 델리게이트 관련하여 호출순서 질문 드립니다.

해결됨

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

7강을 끝낸 시점에서 UABHpBarWidget::NativeConstruct() 는 UABCharacterStatComponent::BeginPlay() 보다 먼저 호출되어야만 하는 것으로 알고 있는데요, (위젯의 NativeConstruct() 호출을 통해 먼저 함수를 OnHpChanged 에 바인딩 한 후, BeginPlay()를 호출하여 내부의 SetHp(MaxHp)를 호출, 그 안에서 OnHpChanged.Broadcast(CurrentHp); 실행을 통해 바인딩된 함수를 호출하여 위젯의 HpProgressBar를 초기화.) 문제는 위 두개의 함수 내부에 로그를 찍어보니 위젯의 NativeConstruct() 보다 캐릭터스텟의 BeginPlay() 가 먼저 호출이 됩니다. 혹시 저만 그런것인지, 그리고 제가 겪고 있는 현재 이 호출 순서는 정상적인 흐름인 것인지 궁금합니다.

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
hush park 댓글 2 좋아요 0 조회수 151

31:19 위젯컴포넌트와 액터의 정보를 가져오는것과 관련한 질문입니다.

미해결

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

현재 궁금한 것이 두가지가 있습니다. 위젯은 자신을 소유하고 있는 액터를 직접적으로 가져오는 함수가 유저 위젯에 기본적으로 존재하지 않는것인가요? 만약 이것이 불가능하다면, 위젯은 자신을 소유하고 있는 위젯 컴포넌트를 통해서 위젯 컴포넌트를 소유하고 있는 특정 액터의 포인터를 가져오는 함수가 유저위젯에 존재하지 않으며, 또한 해당 액터의 포인터를 저장하는 변수도 유저 위젯에 모두 구현되어있지 않기 때문에 임의로 확장해서 이것들을 전부 구현했다고 볼 수 있는건가요?

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
댓글 3 좋아요 0 조회수 191

OnOverlapBegin함수에 관하여 질문있습니다.

미해결

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

안녕하세요 교수님. OnOverlapBegin 함수를 선언할때 많은 매개변수들이 있는데, 이러한 매개변수들을 외우고 다니는게 아니라면 참조하여 갖고올만한 소스코드나 파일이 있어야할 것 같은데, 어떠한 경로를 통해 갖고올 수 있을까요? 추가적으로, 박스 콜리전 크기를 코드에서 설정해주고 있는데 박스 크기의 경우에는 경우에 따라 에디터에서 계속해서 변경하면서 테스트 해보고 싶을 수 있을 것 같은데, Blueprint에서 변경할 수 없도록 코드에서만 사이즈를 설정가능하게 한 이유가 혹시 있을까요? (UPROPERTY(VisibleAnywhere, Category = Box)) 항상 강의 잘 듣고 있습니다. 감사합니다.

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
이경택 댓글 2 좋아요 0 조회수 138

우선순위 관련 질문입니다.

해결됨

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

34:49 에서, DeadSlot 가 최우선순위로 재생하도록 설정하셨다고 하였는데, 이 죽는모션이 최우선순위로 재생된다는 것이 어떤 의미인지 알고 싶습니다. defaultGroup 안에서의 2개의 슬롯 중 DeadSlot 이 다른 슬롯보다 우선순위로 재생된다는 의미인가요?

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
hush park 댓글 2 좋아요 0 조회수 135

c++파일의 삭제에 관하여 질문드립니다.

미해결

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

안녕하세요. 교수님 파일명 변경에 관하여 질문드리고 싶습니다. Character를 만들때 이름을 MyABCharacter로 잘못지은 바람에, MyABCharacter를 ABCharacter로 수정하고 싶어 visual studio에서 삭제를 했습니다. 그러나 언리얼 에디터의 C++ classes에서는 MyABCharacter가 사라지고 있지 않아 질문드립니다. 어떻게 해야할까요? 추가적으로 이런 상황에서 파일의 이름을 변경하고 싶을때는 어떻게 해야하는지 질문드립니다. 에디터에서 auto로 제공하고 있는 기능이 있는지 궁금합니다.

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
이경택 댓글 2 좋아요 0 조회수 178

인기 태그

인프런 TOP Writers

주간 인기글