처음 듣는 개념들이 많아서 글을 정리하며 강의를 보고 있는데, OnRep_Owner 를 Override 해서 사용할 때 Super::PostNetInit() 을 실행해야하는 이유가 있을까요? 아니면 복붙하는 과정에서 일어난 단순 오타인가요? 제가 수업을 놓친 건지 헷갈려서 질문 남깁니다 밑에 같은 질문이 있었네요 오타인 거 확인했습니다. 이번 강의도 감사합니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! 레벨 블루프린트 제작 후에 실행 을 눌렀는데 메시지 로그 -맵체크가 뜨고 창을 닫으니까 레벨에 화면이 검은색으로 보입니다. 블루프린트로 print text 작성한 부분은 화면에 잘 뜨는데 레벨이 아예 검은색으로 보이는데 혹시 레벨 제작 과정에서 문제가 있었던 걸까요?
프로젝트명을 변경할 때 겪는 문제들로 인해 삭제하고 다시 생성하느라 시간을 많이 소비하고 있습니다. 제가 겪고 있는 문제점들을 짚어보겠습니다! 공식적으로 편리하게 이주 또는 프로젝트명 변경을 할 수 있는 방법을 알고싶습니다. 버전은 5.4.4 사용 중입니다. 기존 프로젝트명: ArenaBattle 변경한 프로젝트명: BEAD 프로젝트명 변경 이후 기본적으로 진행한 작업들 DefaultEngine.ini에 Redirect할 경로들 모두 적은 후 .uasset 데이터들 옮기기 소스코드 내 모든 모듈명 교체, .uproject 명세서 내 모듈명 교체, Build.cs 내 모듈명 교체 (버전 확인도 제대로 수행) Saved, Intermmidate, DerivedDataCache, Binaries, 솔루션 삭제 후 generate -> Rebuild 에디터 내 Content 폴더 우클릭 > Update Redirector References C++ 클래스 생성자 내 참조하는 경로 모두 변경한 프로젝트 경로로 설정 & 에디터의 모든 블루프린트 내 Parent 경로 Redirect한 것으로 적용된 것 확인 에픽게임즈 라운처 > 언리얼 엔진 > 검증 수행 질문 모음 1. Redirect를 시도했는데도 불구하고 "행동 트리"와 "데이터 애셋"의 경우, 참조하는 클래스가 새로운 프로젝트명의 클래스를 찾지 못하는 문제 시도한 내용: Redirect 사용 시 Widget Blueprint 등은 Parent 경로는 잘 찾았으나 Behavior Tree 내 클래스 경로 와 데이터 애셋의 경로 는 제대로 찾지 못해 삭제하고 다시 생성해야 하는 경우가 발생했습니다. (물론, Redirect 작성 이후 .uasset을 옮기고 캐시 삭제 및 generate 수행) // DefaultEngine.ini // [CoreRedirects] +ClassRedirects=(OldName="/Script/ArenaBattle.ABComboActionData", NewName="/Script/BEAD.ABComboActionData") // 애셋 데이터 +ClassRedirects=(OldName="/Script/ArenaBattle.BTService_Detect",NewName="/Script/BEAD.BTService_Detect") // 행동트리 ... 이하 생략 2. Animation Montage의 경우, 정보들은 그대로 잘 옮겨져 Notifies도 제대로 배치되어 있지만 삭제하고 다시 설치하지 않으면 C++ 클래스 내 Notify 함수가 호출되지 않는 현상 아래 AM_ComboAttack 몽타주는 Redirect를 사용하여 정상적으로 열리고, 모든 내용들이 잘 배치가 되어 있으나 아래 AttackHitCheck 노티파이를 삭제하고 다시 배치하지 않으면 C++ Notify 함수가 재생되지 않는 현상이 발생합니다. 3. 기존 모듈명은 이미 수정하여 어느 곳에도 존재하지 않는데 자꾸 VerifyImport: Failed to find script package for import object 'Package/Script/ArenaBattle' 경고가 뜨는 현상 모든 소스코드와 명세서, 그리고 블루프린트 내에도 이전 모듈명과 관련된 내용이 없는데도 엔진을 실행하면 아래 경고문이 나옵니다. (당연히 캐시 삭제와 generate, rebuild, update redirector references 수행했습니다.) 물론, BP_ABGameMode.uasset을 다시 지우고 생성하면 해결되겠지만 위의 질문들을 포함해서 Redirect를 사용하고 코드를 전부 수정해도 자꾸 적용이 안되는 게 생기고 아래 오류가 생기니 새로 삭제하고 다시 만들어야 하는 번거로움이 있습니다 ㅜ 해결방법을 알고싶습니다. LogLinker: Warning: [AssetLog] D:\4.Unreal\BEAD\Content\ArenaBattle\Blueprint\BP_ABGameMode.uasset: VerifyImport: Failed to find script package for import object 'Package / Script / ArenaBattle'
Item#12 강의에서 마지막에 실행하려고 하면 아래와 같이 ItemTemplateID를 가져오지 못하는 문제가 발생합니다. 그 전까지 발생하지 않았는데 B_Character_Base와 B_HeroCharacter_Base 이동 후에 발생하는 것으로 보아 이 과정에서 뭔가 잘못된 것이 있는 것인지 문의 드립니다. ItemTemplateClass도 넘어오고 ItemTemplateClassToID에도 해당 항목이 있는 것 같은데 ItemTemplateID를 가져오지 못하는 것 같습니다. ItemTemplateID를 가져오지 못하네요
입력에 대한 처리를 SetupPlayerInputComponent()를 통해 직접 정의한 함수와 바인딩할 수 있는데, 입력 키는 어떻게 설정할 수 있나요? 인풋 액션 클래스를 따로 정의하면 가능한 일인가요? 현재 블루프린트의 인풋 클래스를 사용해서라고 예상중입니다. 또한, CharacterBase에 있는 이 코드는 이 클래스를 상속받는 Pawn의 고유 값으로 설정되는건가요? 하위 클래스들에게 독립적으로 적용시키도록 할 수도 있는건가요?
안녕하세요. 강의 37분정도까지 따라서 소스 작성하고 실행을 해봤는데요. 캐릭터의 움직임이 A,D가 앞뒤이고, W,S가 좌우로 움직이더라구요 혹시 Move함수에서 뭘 바꿔야하나 생각해서 AddMovementInput(ForwardDirection,MovementVector.X); AddMovementInput(RightDirection,MovementVector.Y); 부분을 AddMovementInput(ForwardDirection, MovementVector.Y); AddMovementInput(RightDirection, MovementVector.X); 로 바꾸니 제대로 동작하더라구요. 혹시 이유가 뭔지 알수있을까요?
안녕하세요 Enhanced Input Mapping Context 에서 Input Action 을 바인딩하는 부분에서 W,S 키를 눌러 전진, 후진을 처리하는 IA 에서는 Vector2D Y 위치에 값을 대입하고 A,D 좌우에는 X 값에 값을 대입하는데요 (Swizzle Input Axis Value 를 이용해서) 언리언 엔진에서 character 를 살펴보면 좌표계는 왼손 좌표계이고 캐릭터가 앞을 바라보는 부분이 X 축에 위치하고 우측이동이 Y 축인데 왜 Y 위치에 전진 관련 값을 처리하도록 넣는 건가요? void AABCharacterPlayer::Move(const FInputActionValue& Value) 함수에서도 전진은 X 축으로 const FVector ForwardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X); AddMovementInput(ForwardDirection, MovementVector.X); 좌우는 Y 축으로 처리하는데 const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y); AddMovementInput(RightDirection, MovementVector.Y); 처리 과정이 궁금합니다.
로깅 및 디버깅을 해 본 결과,PawnExtensionComponent가 DataInitialized->GameReady를 거친 이후에 HeroComponent::OnActorInitStateChanged가 2번 호출되며 각각 PawnExtensionComponent가 DataInitialized, GameReady가 되었다고 콜백이 옵니다.. (PawnExtensionComponent가 DataInitialized된 이후에 바로 HeroComponent::OnActorInitStateChanged가 호출되어야 정상) 이로 인해서 ULCHeroComponent가 DataAvailable 상태에서 다음 단계로 진행이 안되네요. 무슨 문제일까요?
수업 자료 중에 Half Height가 캡슐의 반구 부분을 제외한 몸통 부분의 절반 높이라고 표현되어있고, 수업 코드상 수치도 그렇게 계산 된 것으로 보입니다. 하지만 아무리 테스트해 봐도 판정 범위와 다른것 같아 테스트 결과와 함께 질문드립니다. 위 사진은 수업 코드와 그 실행 결과입니다. NonPlayer의 캡슐와 닿지 않아도 충돌 처리 된 모습입니다. 아래 사진은 Half Height에 캡슐의 반구 크기를 포함 시킨 수치를 적용한 코드와 그 실행 결과입니다. 그려진 캡슐과 정확히 겹칠 때 충돌 처리된 모습입니다. 그래서 아래의 자료에서 초록색으로 표기한 길이가 Half Height인지, 혹은 수업 자료의 Half Height는 맞지만 DrawDebugCapsule함수의 인자만 초록색 표기된 부분으로 사용하는 것인지 질문드립니다!!
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
루키스님 안녕하세요? C# 서버에서 넘어와서 CPP 서버 공부하고 있습니다. 스트레스 관련해서 이해가 안되는 부분이 있어 질문 드리게 되었습니다. 제가 스트레스 테스트를 한 방법은 recvCount, sendCount 변수에 ++하여 1초에 1번 출력하는 방식으로, '개략적으로' 카운트가 되는지 테스트하고 있습니다. C# 서버에선 C_Move패킷을 각 클라이언트가 0.25초마다 서버로 보내서 100명의 더미클라이언트로 치면 서버에서 400번 Recv, 40000 Send(브로드캐스트이므로) 정도로, 300명 정도까지 Move 패킷을 처리할 수 있는 수준으로 부하테스트가 되었습니다. 근데 CPP IOCP 서버에서 워커 스레드는 컴퓨터 스레드 개수에 맞게 하는게 적당하다고 하셨고, 실제 배포하신 자료에도 워커스레드는 5개를 정해주셨습니다 (저는 핵사 코어 컴퓨터를 사용 중입니다) C#과 마찬가지로 더미 클라이언트.가 C_Move 패킷을 보내고 count 변수에 ++하면서 보고 있는데, 워커 스레드가 오히려 1개일 때 월등히 작업이 빠릅니다 . 스레드 1개는 300명 내외까지 가능하지만, 2개 이상부터는 100명도 버거운 수준이었습니다. 룸이 하나인 상황이어서 컨텍스트 스위칭 때문에 오히려 워커 스레드 2개부터 느릴 수 있는걸까요? 고민해봤는데 명확한 답이 안나와 질문 드립니다.