![[Rookiss University] UE5 Lyra 클론 코딩 (Haker)강의 썸네일](https://cdn.inflearn.com/public/courses/332307/cover/68a4025d-0d13-4677-a058-4db2af44a3a5/332307.png?w=420)
[Rookiss University] UE5 Lyra 클론 코딩 (Haker)
₩660,000
중급이상 / Unreal Engine, C++
4.9
(15)
UE5에서 제공하는 Lyra 프로젝트의 핵심 부분을 따라 만들며 차근차근 그 구조를 학습하는 강의입니다.
중급이상
Unreal Engine, C++
질문&답변
미니맵 제작
언리얼에서는 형태만 제공해준거라서 마음껏 원하시는 방향에 맞게 수정하시는게 맞습니다.
질문&답변
UGameUIManagerSubsystem::ShouldCreateSubsystem 이상한 것 같은데요
해당 클래스는 UI 관리에 대한 추상화 클래스라서 자식이 없을 때만 생성되는게 맞습니다.대신 해당 클래스를 상속 받아 원하는 방식의 UI 시스템을 만들도록 설계되었습니다.
질문&답변
질문있습니다~~
FActorSpawnParameters SpawnInfo; SpawnInfo.Instigator = GetInstigator(); SpawnInfo.ObjectFlags |= RF_Transient; SpawnInfo.bDeferConstruction = true; if (APawn* SpawnedPawn = GetWorld()->SpawnActor(PawnClass, SpawnTransform, SpawnInfo)) SpawnInfo에서 bDeferConstruction을 true로 해서 지연시켰던 스폰을 다시 진행하는거에요.
질문&답변
ASC nullptr 문제
이런 경우는 간단해서 3가지로 나눠서 디버깅 해보면 됩니다.1. OwingActor 변수에 nullptr 여부2. Cast 여부3. GetAbilitySystemComponentFromActor 여부
질문&답변
애니메이션이 안 나옵니다.
가장 편하신 방법은 강의 맨 마지막에 블루프린트 포함해서 풀 버전이 있습니다.비교해보시면서 잘못된 부분을 찾으면 가장 쉽게 해결 가능할 것 같아요.
질문&답변
UPROPERTY매크로 AllowedType이 동작하지 않습니다.
AllowedTypes 입니다.
질문&답변
Experience와 GameFeature를 사용할 때 SaveGame
Experience가 GameFeature도 포함 관계로 되어 있어서 저라면 Experience + 추가 정보에 대한 GameData Asset을 제작할 것 같네요추가 정보는 말씀하신대로 프로젝트마다 너무 달라서 필요하신 부분을 저장하시면 될 것 같아요.
질문&답변
AddLoadedAsset 쓰레드 부분 이해가 안갑니다.
멀티 스레드 관련 내용은 난이도가 높아서 강의에서는 간단하게 에디터 로드 중으로 말씀드렸었는데 에디터 로드 과정에서 쓰레드 문제는 좀 복잡해서 다른 예시로 알려 드릴게요.어떠한 에셋을 로드하는 과정 자체를 언리얼에서는 게임 스레드 말고 다른 스레드로 Task 형태로 던져서 시킬 수가 있어요. 만약에 100개를 로드해야 한다고 가정하면 20개씩 다른 스레드로 Task 형태로 던지면 정말 속도가 빠르거든요.이렇게 로드하면 문제가 로드에 대한 데이터를 가지고 있는 배열에서 경쟁 상태 문제가 발생합니다.그래서 락 방식으로 안전하게 라이라는 처리 한거에요.에디터 로드 중에 저희가 임의로 모듈 단계에서 뭔가 건드리면 의도치 않을 수 있긴 한데 이것도 경우의 수도 너무 많고 어려워서 일반적으로 고려하지 않으셔도 괜찮습니다.
질문&답변
GameFeatureAction 완료 시점
OnExperienceLoaded는 Experience가 로드가 완료되었다고 보장되는 거라서 AddComponent로 부착된 컴포넌트의 초기화 보장이랑은 다릅니다.왜냐면 Experience가 완료된 후 엄청 나중에 Actor를 생성할 수도 있잖아요?GameFeature의 AddComponent는 정말 대부분 문제없이 되도록 방어 로직이 많아서 사용하는 시점에서 걱정하실 일은 거의 없으세요.단 네트워크가 들어가면 문제가 생길 수도 있는데 이것도 대부분은 방어 로직이 되어 있기는 합니다.
질문&답변
AActorComponent의 RegisterComponentWithWorld()에서 이어지는 Activate()에 관한 질문입니다
Tick 등록 함수를 중복해서 호출해도 괜찮은 이유는 크게 두 가지입니다.첫째, SetTickFunctionEnable 함수 내부에서 IsTickFunctionRegistered를 통해 이미 Tick이 등록되어 있는지 확인하기 때문에, 여러 번 호출하더라도 동시에 여러 Tick이 등록되는 것을 방지합니다. 따라서 부담 없이 호출하셔도 됩니다.둘째, 더 중요한 이유인데 최초 등록을 기준으로 한다면 SetTickFunctionEnable의 첫 번째 호출은 TickState를 단순히 Enable로 변경할 뿐, 실제로 Tick을 등록하지는 않습니다. Tick 등록은 RegisterAllComponentTickFunctions 단계에서 이루어집니다.추가로, Actor의 경우 BeginPlay 함수에서도 다음과 같이 Tick 등록이 진행됩니다:PrimaryActorTick.SetTickFunctionEnable(PrimaryActorTick.bStartWithTickEnabled || PrimaryActorTick.IsTickFunctionEnabled());이 단계에서는 TickState를 Enable로 변경합니다.PrimaryActorTick.RegisterTickFunction(GetLevel());이 단계에서 비로소 Tick을 등록합니다.겉보기에는 Tick 등록 함수가 두 번 호출되는 것처럼 보일 수 있지만, 실제로는 TickState 변경과 Tick 등록이라는 서로 다른 역할을 하는 동일한 과정의 일부분이라는 것을 알 수 있습니다.
Liu님의 소개 - 인프런