묻고 답해요
139만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
클라이언트 새로 생성시 크래쉬 나는 문제..
안녕하세요. 영상을 보면서 언리얼을 배우고있는 학생입니다.선생님께서 알려주신대로 제가 따로 만든 프로젝트에 점목을 시키고있는데 클라이언트 추가 생성시 GameMode를 상속받은 클래스에서 Login()함수에 NewPlayer의 플레이어 컨트롤러가 NULL로 들어와 크래쉬가 나 에디터가 꺼지는 현상이 일어 나고있습니다.. 어떻게 해결이 가능할까요???
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
abort와 관련한 질문이 있습니다.
27:03 부분에서, target이 is not set으로 시작하여 오른쪽 시퀀스의 하위 테스크를 순차적으로 실행중인 상황에서, 만약 target이 detect에 의해 감지되어 is set이 되면 blackboard:target is not set <- 이 데코레이터는 실시간으로 target 값을 감지하여, detect로 인해 데코레이터의 target이 is set으로 될 경우 실행중이던 task는 즉시 failed를 반환한 후 abort를 하게 되는건가요? (데코레이터도 service처럼 tick 함수가 호출되나요?)이것이 참이라면, abort가 된 후에 root로 돌아가는것이 아니라 상위 노드인 selector로 돌아가서 평가를 다시 하게 되는 원리인가요? 아니면 root로 돌아가게 되나요?
-
미해결Go Hard to Unreal (feat. 취준 멘토링)
Serialzation 부분 Object Graph 질문입니다.
하나의 오브젝트가 다른 오브젝트를 속성으로 가지고 있는 관계를 오브젝트 그래프라고 설명해주셨는데, Object그래프와 Has-a관계와는 어떤 비교가 가능할까요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
OnHpChanged 델리게이트의 broadcast 호출시점에 대한 궁금증이 있습니다.
우선 제가 알고있는 바로는 UABCharacterStatComponent::BeginPlay() 가 호출될 시, 내부에서 SetHp 함수가 호출되며 그 안에 있는 OnHpChanged.Broadcast(CurrentHp); 가 호출되므로, 그 전에 OnHpChanged가 바인딩되어 있어야 한다. UABHpBarWidget::NativeConstruct() 내부에 SetupCharacterWidget(this) 가 호출되고, 이 안에서 Stat->OnHpChanged.AddUObject를 통해 &UABHpBarWidget::UpdateHpBar 를 바인딩한다. ---먼저 OnHpChanged 에 어떤 함수를 바인딩 후에 1. 처럼 Broadcast 를 하는것이 순서로 알고 있는데, 위젯의 NativeConstruct() 는 스탯컴포넌트의 BeginPlay() 보다 늦게 호출되는 것으로 알고 있어서 만약 이것이 사실이라면, 2. 의 바인딩 과정 이전에 이미 스탯컴포넌트의 BeginPlay를 통해서 바인딩되지 않은 OnHpChanged를 Broadcast를 해버리는 결과가 생길수도 있는건가요?
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
수업과 좀 관련없는 문제지만 질문 있습니다
안녕하세요. 항상 강의 잘 듣고 있습니다.제가 집에서 듀얼 모니터를 사용하면서 노트북 모니터가 아닌 다른 모니터에서 언리얼 엔진을 띄우고 공부를 합니다.근데 밖에 나가서 노트북 모니터로만 하다가 그동안은 잘 됐었는데 갑자기 GPU Crashed or D3D Device Removed.Use -d3ddebug to enable the D3D debug device.Check log for GPU state information. 이라는 에러 창이 뜨면서 프로젝트가 켜지질 않습니다.제가 인터넷에서 방법을 찾아보면서 드라이버 재설치, defaultengine.ini에서 dx11로 바꾸고 실행, trddelay 설정, 엔비디아 제어판 전원파워 최고 성능 선호로 설정, 언리얼 엔진 외장 그래픽만 사용하도록 설정이렇게 다양한 방법들을 해봤는데 그래도 안되더군요. 근데 집가서 다시 듀얼 모니터로 연결하고 실행해보니 언리얼 엔진이 잘 켜졌습니다.어디가 문제고 어떻게 해결할 수 있을까요? 다음은 크래쉬 리포터에 뜨는 내용입니다. LoginId:e119c4204e141de266d9dca94151ea5aEpicAccountId:2ceddc945c6f4fcab6b011ccf8e10152Fatal error: [File:D:\build\++UE5\Sync\Engine\Source\Runtime\D3D12RHI\Private\D3D12Util.cpp] [Line: 868] hr failed at D:\build\++UE5\Sync\Engine\Source\Runtime\D3D12RHI\Private\Windows\WindowsD3D12Viewport.cpp:189 with error DXGI_ERROR_DEVICE_REMOVEDUnrealEditor_D3D12RHI!D3D12RHI::VerifyD3D12Result() [D:\build\++UE5\Sync\Engine\Source\Runtime\D3D12RHI\Private\D3D12Util.cpp:868]UnrealEditor_D3D12RHI!FD3D12Viewport::Init() [D:\build\++UE5\Sync\Engine\Source\Runtime\D3D12RHI\Private\Windows\WindowsD3D12Viewport.cpp:180]UnrealEditor_D3D12RHI!FD3D12DynamicRHI::RHICreateViewport() [D:\build\++UE5\Sync\Engine\Source\Runtime\D3D12RHI\Private\D3D12Viewport.cpp:831]UnrealEditor_SlateRHIRenderer!FSlateRHIRenderer::CreateViewport() [D:\build\++UE5\Sync\Engine\Source\Runtime\SlateRHIRenderer\Private\SlateRHIRenderer.cpp:409]UnrealEditor_SlateCore!SWindow::ShowWindow() [D:\build\++UE5\Sync\Engine\Source\Runtime\SlateCore\Private\Widgets\SWindow.cpp:1410]UnrealEditor_MainFrame!FMainFrameHandler::ShowMainFrameWindow() [D:\build\++UE5\Sync\Engine\Source\Editor\MainFrame\Private\Frame\MainFrameHandler.h:265]UnrealEditor_MainFrame!FMainFrameModule::CreateDefaultMainFrameAuxiliary() [D:\build\++UE5\Sync\Engine\Source\Editor\MainFrame\Private\MainFrameModule.cpp:319]UnrealEditor_UnrealEd!EditorInit() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\UnrealEdGlobals.cpp:171]UnrealEditor!GuardedMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Launch.cpp:176]UnrealEditor!GuardedMainWrapper() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:107]UnrealEditor!LaunchWindowsStartup() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:244]UnrealEditor!WinMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:282]UnrealEditor!__scrt_common_main_seh() [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]kernel32ntdll
-
미해결[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클래스에 해도 주기 관련해서 문제는 없을까요?