묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[Rookiss University] UE5 Lyra 클론 코딩 (Haker)
부록 강의를 듣지 않아도 수료증을 받을 수 없을까요?
안녕하세요, 강의를 결제 후 완강하여 수료증을 제출해야 하는 상황입니다.그런데 보니 부록 강의가 30시간이 넘는데도 불구하고, 해당 강의를 완강하지 않으면 수료증이 나오지 않는 것 같아요.커리큘럼에 필수적인 내용이 아니라면, 부록 강의를 듣지 않아도 수료증을 발급 받을 수 없을까요?감사합니다.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
시퀀스 하나가 성공을 반환하면 트리 전체가 종료가되나요?
예를들어 13:50 에서 "친구에게 간다" 가 "친구와 약속"이라는 데코레이터를 만족하여 "약속장소로 이동"을 수행하고 이를 성공적으로 수행했다면, "친구에게 간다"라는 시퀀스는 root에게 성공을 반환하게 되고, 나머지 두 개의 시퀀스는 검토하지 않고 바로 트리 전체를 종료하는 원리인건가요?
-
해결됨[Rookiss University] UE5 Lyra 클론 코딩 (Haker)
배운 내용을 따로 정리해도 가능할까요?
안녕하세요 Rookiss님, 언제나 좋은 강의를 만들어주셔서 감사합니다.강의에서 배울 수 있는 정보들을 블로그에 정리하고자 합니다.하지만 그전에 먼저 Rookiss님의 허락이 필요하다고 생각되어 이렇게 글을 쓰게 되었습니다.언제나 건강하시고 다시 한번 좋은 배움의 기회를 제공해주셔서 감사드립니다.
-
해결됨이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
DefaultArenaBattle.ini 관련 질문입니다
우선 메모장을 이용해서 만들기는 했는데, 여기 안에 있는 내용물은 직접 작성하는 것인가요? 메모장을 만들어놓으면 자동으로 내용이 로드되는게 아닌건가요?
-
미해결[Rookiss University] UE5 Lyra 클론 코딩 (Haker)
매크로 수식
이제는 PRAGMA_DISABLE_OPTIMIZATIONPRAGMA_ENABLE_OPTIMIZATION 대신에 UE_DISABLE_OPTIMIZATIONUE_ENABLE_OPTIMIZATION 사용하라고 언리얼에서 권장하고 있습니다. 위 PRAGMA 매크로들 곧 폐기된다고 경고문에서 나오네요.
-
미해결[입문자를 위한 UE5] Part4. 언리얼 엔진 C++
umg
umg를 캐릭터 클래스에서 addtoviewport 하면 캐릭터에서는 보이는데이때 컨트롤러를 이용해 다른 폰에게 빙의 하면 캐릭터에서 보이던 umg는 사라지나여?아니면 말 그대로 레벨을 새로 로드하지않는이상다른 폰에 빙의해도 캐릭터클래스에 있던 umg는 그대로 보이나여?
-
해결됨이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
패키지 관련 코드 질문이요.
UPackage* StudentPackage = ::LoadPackage(nullptr, *PackageName, LOAD_None);if (nullptr == StudentPackage){UE_LOG(LogTemp, Warning, TEXT("패키지를 찾을 수 없습니다."));return;}//내부에 가지고 있는 에셋을 모두 다 로딩해주는 함수StudentPackage->FullyLoad();다음 코드에서 내부에 가지고 있는 애셋을 모두 다 로딩해주는 함수가 FullyLoad()라고 들었는데요.애초에 하나의 패키지는 하나의 애셋만 가질수있는 구조라고 들었는데 그러면 FullyLoad()는애셋을 하나만 로딩해주는 거 아닌가요? 그리고 SaveStudentPackage( ) 함수에서 패키지를 생성하고 저장하기 전에 UPackage* StudentPackage = ::LoadPackage(nullptr, *PackageName, LOAD_None); if (StudentPackage) { StudentPackage->FullyLoad(); }이 작업을 하면 더 안정적 이다고 하셨는데, 잘 이해가 안가요.. 제가 이해한 바로는로딩해주는 작업은 에디터 상 애셋을 코드상에 가져오기 위해 쓰이는 걸로 알고있는데 그게 아닌가요?
-
해결됨이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
13강 직렬화 관련 코드 질문이 있습니다.
질문은 총 2개 있습니다. 첫 번째 질문입니다. FMemoryReader MemoryReaderAr(BufferArrayFromFile);UStudent* StudentDest = NewObject<UStudent>();StudentDest->Serialize(MemoryReaderAr); 다음 코드는 Serialize함수이지만 역질렬화을 하고 있다고 보면 될까요?단순화시킨 Array<uint8> 타입의 BufferArrayFromFile 바이트스트림을 오브젝트 그래프(StudentDest)로 변환한다고 보면 될까요?---------------------------------------------------------------------------------- 두 번째는 질문이라기 보다는, 제가 제대로 이해한 게 맞는지 검토 한번 부탁드립니다.오브젝트 그래프를 바이트 스트림으로 변환하는 작업은 직렬화 라고 한다. 따라서 오브젝트의 데이터를 바이트 스트림에 쓰는 Writer작업은 모두 직렬화를 위해 쓰인다. 2가지 케이스가 있다.1).TArray<uint8> BufferArray;FMemoryWriter MemoryWriterAr(BufferArray); StudentSrc->Serialize(MemoryWriterAr); 2).FString JsonOutString;TSharedRef<TJsonWriter<TCHAR>> JsonWriterAr =TJsonWriterFactory<TCHAR>::Create(&JsonOutString);FJsonSerializer::Serialize(JsonObjectSrc,JsonWriterAr);반대로 바이트 스트림을 오브젝트 그래프로 변환하는 작업은 역직렬화 라고 한다. 따라서 오브젝트가 바이트 스트림의 데이터를 읽어오는 Reader작업은 모두 역직렬화를 위해 쓰인다. 2가지 케이스가 있다.1).TArray<uint8> BufferArrayFromFile;( "" BufferArrayFromFile 이 파일 읽어오는 과정 생략 "" )FMemoryReader MemoryReaderAr(BufferArrayFromFile);UStudent* StudentDest = NewObject<UStudent>();StudentDest->Serialize(MemoryReaderAr);2).FString JsonInString;FFileHelper::LoadFileToString(JsonInString, *JsonDataAbsoultePath);TSharedRef<TJsonReader<TCHAR>> JsonReaderAr = TJsonReaderFactory<TCHAR>::Create(JsonInString); TSharedPtr<FJsonObject> JsonObjectDest;FJsonSerializer::Deserialize(JsonReaderAr, JsonObjectDest);
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
데이터에셋 블루프린트 reload 후 저장 관련 질문
45:30 부분에서 에서 세 데이터에셋의 블루프린트를 하나로 묶고 Reload 후 Save All을 했을때, Reload 된 각각의 에셋들이 실제로는 Reload가 안된 채로 저장이 되는 것 같습니다.(다만, 마우스를 갖다대면 primary Asset Type은 표면적으로 변경된것처럼 보입니다.) 반면, 묶음으로 Reload를 한 후, 개별적으로 블루프린트를 열고 일일이 저장버튼을 누르면 그제서야 Reload가 적용이 되는지, ensure()이 통과가 됩니다. 예를들어 에러를 띄우기 위해 ,ABItemData.h 에 있는 코드return FPrimaryAssetId("ABItemData", GetFName()); 부분에 태그ID 를 "ABItemData3333", GetFName()) 로 바꾼 후, ABItemBox.cpp 에서FPrimaryAssetId SpecificAssetId(TEXT("ABItemData"), TEXT("ABIS_ScrollTest")); FSoftObjectPtr AssetPtr(Manager.GetPrimaryAssetPath(SpecificAssetId)); 로 바꿔서 아이템 전부를 의도적으로 Scroll 자산으로 설정하고 에디터 실행 후에 설명하신 대로 전체묶음+Reload+save all 을 한 후 플레이를 누르면, 아이템이 생성되는 시점에 ensure(Item) 에서 에러가 발생되길 기대했지만 에러가 발생하지 않고 여전히 정상적으로 아이템박스 인스턴스가 생성이 됩니다. 반면 세묶음으로 Reload를 한 후 세이브는 데이터에셋 블루프린트 각각을 열어 개별저장 한 후에 다시 플레이를 하면 원하던 에러가 뜹니다. 아무래도 save all 이 Reload한 데이터 에셋들을 제대로 저장시키지 못하고 있는게 아닌가 싶습니다. 버그인지 아닌지는 모르겠지만..
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
웹서버
안녕하세요 루키스님 루키스님의 강의를 보면서 나날히 성장하고 있는 예비 언리얼 프로그래머입니다. 다름이 아니고 온라인 서버의 웹서버를 유니티에서만 보고 있습니다.혹시나 해서 궁금한데 데디케이트 서버라는게 효율이 좋을수 있지만 구현자체가 어렵다는걸 알기에 혹시 언리얼과 웹서버를 구현하고 연결할수 있으신가여?가능하다면 혹시 강의도 만들어주실수 있나요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
SetLevelStat함수의 Clamp처리 부분에서 수정이 필요한 것 같습니다.
안녕하세요 먼저 좋은 강의 감사드립니다.ABCharacterStatComponent.cpp의 SetLevelStat함수에서 CurrentLevel에 대한 Clamp의 MinValue가 1, MaxValue가 CharacterMaxLevel로 설정되어있는데 인덱스값이므로MinValue = 1, MaxValue = CharacterMaxLevel - 1로 수정이 필요할 것 같습니다.
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
타임라인함수를 이용한 캐릭터 강제이동
텔레포트를 구현할 때 네트워크 동기화 문제 때문에 CharacterMovementComponent를 확장하는 방식으로 구현해야 한다고 했는데 그러면 타임라인 함수를 사용하여 캐릭터를 특정 위치로 서서히 이동 시키는 기능도 CharacterMovementComponent를 확장하는 방식으로 만들어야 할까요?
-
미해결[LV3 : 기술편] 게임스킬 만들기 - 기획, 아트 누구나 만드는 블루프린트
Level 3 아트편 문의
감사합니다 강의 재밌게 잘 들었습니다 !!혹시 Level 3 아트편은 언제 오픈되나요 ??오픈되면 바로 수강하고 싶습니다
-
미해결이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
GC발동이 다른 객체와는 좀 다른데요
안녕하세요, GA, GE 등은 그래도 객체 정보를 담을 수 있게C++에서 기본적인 작업을 하고 BP로 만든 객체를 세팅해주고 구현이 되는데, GC는 BP로 만든 객체를 세팅 없이 Tag로 바로 발동 되는 거 같습니다. AbilitySystem에서 GamePlayCue로 설정된 Tag의 Asset들을 Tracking하여 따로 관리하는 것일까요?
-
해결됨이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
HudWidget 질문이 있어요
Hud위젯 생성을 PlayerController 클래스가 아닌 Player클래스에 해도 주기 관련해서 문제는 없을까요?
-
해결됨이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
UI 생성 질문이 있습니다.
HUDWidget 같은 경우 CreateWidget함수로위젯을 만들잖아요,. 근데 HpBarWidget같은 경우CreateWidget함수가 안 보이더라고요.어디서 만들어지는거죠? 제가 이해한 바로는 다음과 같습니다. Base클래스 생성자에서 HpBar라는 위젯컴포넌트에주소 참조해서 가져온 HpBarWidget클래스를 HpBar->SetWidgetClass함수에 넣으면 CreateWidget함수처럼 위젯을 생성한다. 이렇게 이해하는게 맞을까요?만약 맞다면 언리얼에서 Widget 생성하는 방법은 이렇게 2가지 있을까요?1. CreateWidget 사용 (HUD 만들 때 사용)2. 위젯 클래스를 주소참조해 가져와 위젯컴포넌트에 담기 (Actor를 따라다닐 UI 만들 때 사용 )
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
언리얼 에디터 Stop버튼
selected viewport나 new editor window로 실행 했을 때Stop 버튼을 눌러도 연결이 끊어지지 않고언리얼 에디터까지 꼭 종료해줘야 끊어지더라구요.stop버튼을 눌렀을 때 종료되는 것처럼 하려면 어떻게 해야 하나요??standalone game으로 해봤을 때 제가 원하는 대로 동작해주긴 했는데위에 두가지 경우에도 방법이 있을까 해서 질문드립니다.
-
해결됨이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
SetupCharacterWidget 인터페이스 사용 이유가 이게 맞을까요?
SetupCharacterWidget 인터페이스 핵심 사용 이유가 액터와 위젯 생성 주기를 고려해 원하는 시점에 초기화 해주기 위함이 맞을까요?인터페이스를 사용하지 않고, BeginPlay에 다음과 같이 코드를 작성해도 오류는 안 나더라고요. 대신 처음에 플레이어 HP바가 다 채워지지 않은 상태로 시작하는 버그는 있지만요. 아무래도 InitWidget , NativeConstruct 함수가 초기화되지 않았기 때문이겠죠?void AABCharacterBase::BeginPlay(){ Super::BeginPlay(); UABHpBarWidget* HpBarWidget = Cast<UABHpBarWidget>(HpBar->GetWidget()); ensure(HpBarWidget); HpBarWidget->UpdateStat(Stat->GetBaseStat(), Stat->GetModifierStat()); HpBarWidget->UpdateHpBar(Stat->GetCurrentHp()); Stat->OnHpChanged.AddUObject(HpBarWidget, &UABHpBarWidget::UpdateHpBar); Stat->OnStatChanged.AddUObject(HpBarWidget, &UABHpBarWidget::UpdateStat);}호출해도
-
해결됨[Rookiss University] UE5 Lyra 클론 코딩 (Haker)
풀소스를 올려주세요.
소스 안올려주셔도 됩니다. 라이라에 다 있었네요. ;;
-
미해결[Rookiss University] UE5 Lyra 클론 코딩 (Haker)
ModularGameplay 순서 관련 질문 드립니다.
아래와 같은 지점에서 저는 문제가 발생을 계속 하고 있는데 혹시 이유를 알수 있을까요?? 모듈러 로그를 활성화 하여 ContinueInitStateChain 쪽 로그 입니다. LogModularGameplay: Verbose: ContinueInitStateChain: Cannot transition B_SimpleHeroPawn_C_0:Hero (role 3) from InitState.DataAvailable to InitState.DataInitializedLogModularGameplay: Verbose: ContinueInitStateChain: Transitioning B_SimpleHeroPawn_C_0:PawnExtension (role 3) from InitState.DataAvailable to InitState.DataInitializedLogModularGameplay: Verbose: ContinueInitStateChain: Transitioning B_SimpleHeroPawn_C_0:PawnExtension (role 3) from InitState.DataInitialized to InitState.GameplayReadyLogModularGameplay: Verbose: ContinueInitStateChain: Cannot transition B_SimpleHeroPawn_C_0:Hero (role 3) from InitState.DataAvailable to InitState.DataInitializedLogModularGameplay: Verbose: ContinueInitStateChain: Cannot transition B_SimpleHeroPawn_C_0:Hero (role 3) from InitState.DataAvailable to InitState.DataInitialized Cannot transition 이 발상한 조건문 체크는// DataAvailable -> DataInitializedif (CurrentState == InitTags.InitState_DataAvailable && DesiredState == InitTags.InitState_DataInitialized){// PawnExtensionComponent가 DataInitialized될 때까지 기다림 (== 모든 Feature Component가 DataAvailable인 상태)//return CLMPS && Manager->HasFeatureReachedInitState(Pawn, UCLMPawnExtensionComponent::NAME_ActorFeatureName, InitTags.InitState_GameplayReady);return CLMPS && Manager->HasFeatureReachedInitState(Pawn, UCLMPawnExtensionComponent::NAME_ActorFeatureName, InitTags.InitState_DataInitialized);} 라이라 원본으로 정상 작동을 진행하는데 코드를 몇번을 수정을 하여도 진척도가 없는데 혹시 원인을 알수 있을까요? InitState_GameplayReady 태그를 사용할 경우에는 정상 동작 합니다..