묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
GameMode를 부모로 생성시 ConstructorHelpers의 기능을 사용할 수 없나요?
예전에 실수로 2강을 먼저 듣다가 1강 다 듣고 공부중인 학생입니다. Reference 경로를 복사해서, ConstructorHelpers의 FClassFinder를 사용하여 DefaultPawnClass를 설정해줄때, GameMode를 부모로 상속받은 C++ 클래스는 DefaultPawnClass가 바뀌지 않던데 부모를 GameModeBase로 바꿔주니 정상적으로 DefaultPawnClass가 바뀌더라구요. 혹시 어떠한 차이 때문에 이러한 결과 차이가 벌어지는지 알 수 있을까요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
수업질문아님) PlayerController blueprint에서 Input Action 처리
Controlled Pawn이 Pawn이던 Character이던 같은 PlayerController 사용 가능하게 구현하고 싶음. Pawn, Character blueprint가 같은 Movement Interface 공유하려면 어떻게 해야 하나요? 근데 Character는 기본 제공되는 movement component 사용하고 싶음.
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
액터 리플리케이션 빈도의 사용성에 관하여 질문드립니다.
분수대와 같이 동작이 예측되는 고정 액터의 경우에 클라이언트에서 로직을 실행하도록 해 네트워크 부하를 줄인다는 것을 이해했습니다. 그런데 분수대 액터와 같은 고정액터가 정말 많은 실제 게임 환경에서 실제로도 각각 액터 하나하나 컨트롤해주면서 최적화를 시켜주나요? 이런 최적화 과정 하나하나가 정말 중요한지, 아니면 리소스 낭비이지만 강의이기 때문에 컨트롤하고 넘어간 것인지 궁금합니다. 실제 현업에서 어떤식으로 활용하는지 그 기준이 있는지 궁금합니다. 감사합니다.
-
미해결[Rookiss University] UE5 Lyra 클론 코딩 (Haker)
8_2_Portal UserFacingExpereinceLoad를 보고 있는데요.
하라는데로 다 따라 했는데 GetPrimaryAssetIdList에서 DA_ShooterCore_ShooterGym를 못찾아요..디버깅하는데..DA_ExamplePlaylist만 나오네요.
-
해결됨이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
수업 노트에 말씀주신 InfinityBlade 관련 애셋이 왜 안보일까요?... 어디서 받을 수 있을 까요
-
미해결이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
UPROPERTY 로 리플렉션에 등록한 언리얼 오브젝트들만이 가비지 컬렉터의 관리를 받게되나요?
11:32 부분의 PPT를 보고 궁금한 점이 있습니다. 생성한 언리얼 오브젝트들은 GUObjectArray 에 들어가고, 가비지 컬렉터는 이곳의 언리얼 오브젝트들을 관리합니다. PPT를 보면, UPROPERTY로 참조된 언리얼 오브젝트 들은 회수되지 않는다고 명시되어있는데, 반면 언리얼 오브젝트지만 리플렉션 시스템에 등록하지 않은 객체라면 GUObjectArray 에 들어가지 않고, 가비지 컬렉터의 관리대상에서도 벗어나나요? 만약 가비지컬렉터의 관리대상이 아니라면 raw pointer 처럼 직접 메모리를 관리해야하는지도 궁금합니다
-
미해결이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
오브젝트 소멸 관련해서 질문있습니다
안녕하십니까 교수님 다름이 아니고 발행-구독 패턴의 주체인 MyGameInstance의 Student 오브젝트 선언 부분에서 궁금한 점이 생겨서 질문 드립니다.25:47초 쯤에서 구문 실행시 아래의 오브젝트는 자동 소멸된다고 하셨습니다. 따라서 Outer가 필요 없다고 하셨고, outer가 필요없는 이유는 Student 객체가 주체에서 관리될 이유가 없기 때문이라고 이해했습니다. UStudent* Student1 = NewObject<UStudent>(); UStudent* Student2 = NewObject<UStudent>(); UStudent* Student3 = NewObject<UStudent>();근데 '구문 실행'시 자동 소멸이 된다는게 이해가 되지 않습니다. 구문 실행시가 아닌 해당 함수에서의 작업을 모두 마친 후 소멸하는게 아닌가요?아니면 student객체들이 엔진에 레퍼런스되지 않기 때문에 선언 후 소멸된다는 의미에서 저렇게 말씀하신걸까요? 혹시 제가 오브젝트 관련해서 잘못 이해했거나 부족한 지식이 있는거라면 지적해주신다면 정말 감사합니다.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
BT 실 사용 유무
다른 게시물에서 이러한 답변을 하셨는데 '사실 언리얼의 BT가 실전에서 쓰기에는 좀 애매한 부분이 있습니다.' 그 이유를 알 수 있을까요??그리고 만약 실전에서 사용하지 않는다면 몬스터의 AI는 어떤 방식으로 구현하나요??
-
미해결[입문자를 위한 UE5] Part2. 언리얼 엔진 2D 게임 개발 입문
다각도 바향 전환
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.강의 듣고 실습도 해보고 강의의 내용을 토대로 소스들을 직접 제작하여 만들어 보다가 궁금한게 생겼습니다.애니메이션 위, 아래, 좌, 우 방향 전환은 알겠는데 대각선이나 8방향이나 16방향으로 방향 마다 다른 플립북을 배치 할려면 어떻게 블루프린트 를 생성해야할까요? 강의랑 다른 내용이라 인터넷에서 찾아보고는 있는데 언리얼엔진 내용은 너무 찾기 힘드네요
-
해결됨[언리얼 공인 강사 직강] 하루만에 언리얼 엔진5 입문하기
12분 13초에서 레벨 블루프린터가 어디에 있나요?
12분 13초에서 레벨 블루프린터가 어디에 있나요? 직접 만들어야 하는건가요?
-
미해결[Rookiss University] Haker님의 UE5 소스코드 분석 시리즈 #1 (게임 프레임워크)
과거 영상이다보니 내부 코드가 다른 경우 어떻게 공부하나요
영상에 당시 최신버전인 5.3으로 진행되어 5.3 branch을 다운받았으나 내부 코드가 바뀌었는지 당장 1주차에서 진행되는 Launch.h 코드 자체가 없습니다. 그나마 LaunchWindows.cpp 코드와 유사하여 그 코드로 보는 중이긴한데 이런식으로 공부하는게 맞나요?
-
미해결[켠김에 출시까지] UE5 다크앤다커 스타일의 익스트랙션 RPG (D1)
데디서버쓰는데 런처에서 받은거 써도 되나요?
데디서버쓸려면 깃에서 소스코드 빌드해서 써야 되는 걸로 아는데, 런처에서 받은거 써도되나요?
-
미해결[Rookiss University] UE5 Lyra 클론 코딩 (Haker)
PawnExtensionComponent에 AbilitySystem을 캐싱할 때 TWeakObjectPtr을 사용하지 않은 이유
PawnData는 메타데이터를 들고있는 객체라고 생각해서 지나갔는데 AbilitySystemComponent는 TWeakObjectPtr이 조금 더 명확하지 않을까?? 생각이 들어서요..!물론 UPROPERTY를 썼다고 해도 PlayerState가 없는데 PawnComponent가 정상적으로 존재한다는게 이상한 상태라 상관 없을 것 같긴 하지만 UPROPERTY까지 사용해가면서 들고있어야하는건가? 하는 생각도 있구요BlueprintRead...가 없어서 BP에서 읽기위함도 아닌 것 같고..아니면 혹시 WeakPtr을 사용하는 기준과 ObjectPtr를 사용하는 기준이 나눠져있는걸까요?라이라에서도 UPROPERTY로 지정되어있어서 이유가 있을 것 같아서 여쭤봅니다!
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
프로그래밍과 관련된 것은 아니지만 폴더를 만드는 방식에 대해서 궁금한 점 질문드립니다.
안녕하세요, 교수님. 강의 중에 게임레이어, 미들웨어레이어, 데이터레이어에 대해서 말씀해주셨는데 폴더도 그에 맞춰서 만들어도 되는지 궁금합니다./Source/ArenaBattle/Game/Character /Source/ArenaBattle/Interface /Source/ArenaBattle/Middleware/Item /Source/ArenaBattle/Data/Character 이런 식으로 나눠놓아도 될런지 알고 싶습니다.
-
미해결이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
FindProperty와 FindFunction의 반환값 차이를 둔 이유가 궁금합니다.
변수는 단순히 값을 복사해 출력하면 되지만, 함수의 경우에는 원본 함수를 참조해서 실행해야 하기때문에, 함수 객체를 가져왔고, 인스턴스의 내장 함수를 사용해서 함수를 실행한건가요?
-
미해결[켠김에 출시까지] UE5 다크앤다커 스타일의 익스트랙션 RPG (D1)
GladiatorCore 설정 후 실행시 문제
GladiatorCore 강의 따라 진행하고 실행 누르니까 계속 크래쉬가 납니다... 이후에 계속 스샷창 뜨면서 언리얼 에디터가 켜지지도 않네요..
-
미해결[켠김에 출시까지] UE5 다크앤다커 스타일의 익스트랙션 RPG (D1)
Asset Manager 관련 질문입니다.
Lyra에서 에셋을 로드할때 한가지 예시로 GetAsset( ) 함수에서는 TSoftObjectPtr 타입의 포인터를 전달해주고 있는데요,인자로 받은 소프트 오브젝트를 SynchronousLoadAsset( ) 함수로 실질적으로 메모리에 로드하는걸로 알고있습니다.그러면 AssetManager의 Primary Asset Types To Scan으로 에셋들이 관리되는 이유가 따로 있을까요? AssetManager의 Primary Asset Types To Scan로 관리되는 에셋들과내부함수를 사용하여 로드한 에셋들의 관계에 대해 궁금합니다.
-
미해결[켠김에 출시까지] UE5 다크앤다커 스타일의 익스트랙션 RPG (D1)
에셋 이주 파일을 다운 받아 압축을 풀면 파일복사 에러가 뜹니다.
에셋 이주를 위해 파일 압축을 풀 때 위 이미지 오류가 뜨는데, 저만 이 에러가 뜨는건지 궁금합니다. 혹시나 해서 다른 압축 프로그램으로 풀어봐도 같은 현상이 납니다.
-
해결됨[켠김에 출시까지] UE5 다크앤다커 스타일의 익스트랙션 RPG (D1)
ThirdPersonCPP만들어서 열면 오류가 엄청 뜹니다
Lyla파일 D1도 비슷합니다..cpp파일 하나 열때마다 오류가 엄청 생기네요언리얼 버전 재설치, 버전 5.5(두번째사진)로 해보기라이브코딩 끄고 save..,binary,inter... 폴더 제거 등이리저리 해결법을 검색해보곤 있습니다만 성과가 없네요..ㅜㅜ
-
해결됨이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
28:50 에서 SetPercent 함수와 관련하여 궁금한 점이 있습니다.
파트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(업로드가 처음이라 제대로 올라간 것인지 모르겠습니다..)