교수님의 강의에 언제나 큰 도움을 얻고 있습니다. 기존의 질문을 GAS 강의에서 작성하였으나, 강의 주제와 맞지 않다고 판단하여 다시 작성하게 되었습니다. 제가 겪고 있는 문제를 글로 설명드리기 보다는 직접 보여드리는 것이 나을 것 같아 동영상으로 대체하였습니다. 아래의 링크는 현재 발생하고 있는 문제를 담은 유투브 링크입니다. https://www.youtube.com/watch?v=SC1bD4pls3U C++ 클래스로 만든 애님 인스턴스에서 파생된 애니메이션 블루 프린트를 사용해 포즈 워핑을 연습하고 있던 도중 영상과 같은 문제가 발생했습니다. 가속도에 따라 발을 디디는 속도가 달라지게끔 설계하였지만, 영상처럼 애니메이션이 굳어버리는 문제가 발생하였습니다. 문제가 발생하고 있는 원인을 찾기 위해 로그를 찍어 확인한 결과, LogTemp: Warning: Accelation : X=-2048.000 Y=0.000 Z=0.000 LogTemp: Warning: bHasAccelation : true LogTemp: Warning: Accelation : X=0.000 Y=0.000 Z=0.000 LogTemp: Warning: bHasAccelation : false 문제가 발생하는 시점부터 로그가 위와 같이 찍히는 것을 확인할 수 있었습니다. Accelation과 bHasAccelation은 다음의 코드에 의해 값이 결정됩니다. Accelation = Movement->GetCurrentAcceleration() * FVector(1.0f, 1.0f, 0.0f); bHasAccelation = !Accelation.IsNearlyZero(0.001f); 제가 생각해본 문제의 원인은 가속도가 MaxAccelation 이상을 넘어가면 가속도를 0으로 초기화하는 것이라고 생각하고 있습니다. 혹시 제가 생각한 것이 문제의 원인이 맞는 것일까요? 만약 맞다면 가속도가 MaxAccelation에 도달했을때 어떻게 값을 조절해야 하는지 궁금합니다. 제가 생각한 부분에서 문제가 없다면, 어느 부분에서 문제가 발생할 수 있는지 알려주시면 감사하겠습니다.
안녕하세요 교수님, 강의를 듣고 공부 겸 포트폴리오 하나 만드려고 열심히 코딩하고 있습니다만, NewObejct<>()의 첫번째 인자인 Outer의 개념이 무엇인지 궁금해서 질문합니다. 엔진 코드나 공식 문서를 찾아봐도 그냥 이 'Object this object resides in' 정도의 설명만 적어져 있고, 자세한 Outer의 역할이 작성되어 있지 않습니다. 엔진 코드를 자세히 분석해보기는 너무 어렵고,, 그래서 구글링을 해보았더니 Outer는 Outer Chain, 계층 구조를 표시하는데 유용하다고 합니다. ex) 월드 -> 레벨 -> 액터 -> 컴포넌트. 등 이런 계층 구조를 유지하고 필요할 때 사용하기 위하여 outer를 지정해야 한다는 것 까지는 이해가 갑니다만, 종종 'GC'에도 관여한다는 사람도 있고 아니라는 사람도 있어서 궁금해서 질문을 올립니다. GC는 1. UPROPERTY() 2. FGCObject 상속 후 구현 3. RootSet의 경우에만 GC와 참조 카운트에 영향을 미치는 것이 아닌가요? GC에 관여하지 않는 것이 맞다면, Outer의 목적은 대체 무엇인가요? 단순히 계층 구조의 표현과 필요할 시 사용을 위한 용도인 것인가요? 'Owner'같은 경우는 Part3. 강의에서 오너십과 커넥션 관련 판별에서 유용하게 사용되는 것을 알겠지만 Outer는 정확한 목적을 모르겠습니다.
좋은 강의 감사드립니다. 9강 무한맵의 제작 파트 중 28:29초, 31:27초에 나오는 GetWorld() 관련 함수에 대해 질문드립니다. 아무리 캐릭터를 움직여 문쪽으로 다가가도 새로운 맵을 생성하지 않습니다. 떨어지지 않을 정도로 문 밖에 나갔다가 다시 맵 안으로 들어오면 에디터가 터지는 현상이 생겨 알아보니 SetFight에서 타이머를 설정하는 부분에서 GetWorld가 nullptr을 반환한다는 것을 로그로 확인했습니다. 강사님의 깃허브에서 코드파일을 받아 실행했을 때에는 정상 작동되는 것을 확인하였고, 해당 파일의 ABStageGimmick 관련 헤더와 cpp만 그대로 복사하여 제 환경에서 실행해보았을 때에는 똑같이 GetWorld()가 nullptr을 반환하는 현상이 나타납니다. 맵을 생성하지 않는 문제도 OnGateTriggerBeginOverlap에서 GetWorld()를 호출하는 코드 때문인 것 같은데, 해당 부분에 중단점을 찍어 살펴보니 중단점이 한 번 걸린 이후에는 정상적으로 맵도 생성되고, 이후 SetFight 코드도 정상실행됩니다. (중단점을 안 찍으면 맵이 생성되지 않으며 SetFight가 호출될 때 터집니다) 강사님 코드를 그대로 사용하는데 왜 이런 문제가 생기는 걸까요?
안녕하세요 강사님. 강사님 강의를 통해 언리얼 c++ 입문한 학생입니다. 언리얼에서 c++클래스를 추가할 때마다 Compiling changes for live coding이 시간이 너무 오래 걸리는 상황이 많습니다. 그래서 Cancele하고 7강 전까지 학습을 했었습니다. 근데 "Compiling changes for live coding"완료하지 않으면 Person 클래스가 생성이 안돼서 10분 정도 걸려서 완료했더니 Person클래스가 생성 됐습니다. visual studio에서 빌드할 때도 최소 4~5분정도 걸리는 것 같아요. 컴퓨터 성능은 충분한데 왜 그런가요? 빌드에 소요되는 시간을 단축시키는 방법이 없을까요?
5강을 듣고 수행하면서 마지막 테스트할 때 점프를 하기 위해 스페이스바를 누를 시 점프는 수행되지 않고 hitcheck만 계속해서 수행되는 것 같습니다. 코드와 tag등 똑같이 따라하였는데 무엇이 문제일까요? 위의 사진처럼 스페이스바를 꾹 누른 상태로 돌아다니면 점프 대신에 이렇게 나옵니다
한번에 모아 보려고 한 프로젝트에서 작성중입니다. Student의 부모인 Person에 있는 Card 때문에 오류가 나서요. 혹시 FString 변수만 따로 직렬화가 가능한지 불가능하다면 FArciveUObject를 이용해야되는것 같은데 예시가 있을지 이 두가지를 물어보고싶습니다. FArciveUObject는 사용법 예시를 아무리 검색해도 못찾아서요.
Primary Asset Types to Scan에 PDA_AssetData를 등록해서 나중에 원할 때 로딩 할 수 있다고 하셨는데, PDA_AssetData를 로딩하고 그 안에 있는 AssetSet(번들)을 또 다시 선택적으로 로딩하는 건가요? 아니면 PDA_AssetData를 로딩하는 순간 그 안에 있는 AssetSet(번들)들이 모두 로딩되는 건가요?