강의 코드와 같이 작성했으나 CharacterOwner에 멤버함수에 대해 접근이 안됩니다. //.h FIle class ARENABATTLE_API UABCharacterMovementComponent : public UCharacterMovementComponent 분명 UCharacterMovementComponent 클래스를 상속받았고 UCharacterMovementComponent 클래스안에 ACharater에대한 선언도 있는듯 한데 CharacterOwner포인터가 incompleted class라고 하면서 클래스 내부에 대해 접근을 하지못하네요..ㅠㅠ FVector TargetLocation = CharacterOwner->GetActorLocation() + CharacterOwner->GetActorForwardVector() * TeleportOffset; #include "GameFramework/Character.h" 우선 해당 클래스를 cpp에 포함시켜서 해결은 했는데 저만발생하는거같아 이상하네요 더좋은 방법이 있을까요?? 아래는 에러코드들입니다. error C2027: use of undefined type 'ACharacter' error C2039: 'GetActorLocation': is not a member of 'TObjectPtr<ACharacter> error C2027: use of undefined type 'ACharacter'
안녕하세요, 이해가 잘 안 가는 부분이 있습니다. 46:35 쯤 friend 키워드를 사용해서 gettypehash 함수를 안쪽에 선언한다고 말씀 하셨습니다. 구조체는 기본적으로 전역이기 때문에 friend를 선언하면 구조체의 멤버 함수였던 gettypehash 함수가 구조체 변수에 접근이 가능하면서 전역으로 사용이 가능한 전역 함수가 된다고 이해하면 되는지 궁금합니다.
8강 아이템 시스템 이해 39분 쯤 UPROPERTY(EditAnywhere, Category = "Weapon") TSoftObjectPtr<USkeletalMesh> WeaponMesh; 으로 코드를 변경한 후, 언리얼을 종료하고 VS에서 ctrl + F5로 다시 빌드해서 언리얼을 열고 게임을 실행 후 Obj List Class=SkeletalMesh를 쳐도 드래곤 소드 에셋이 계속해서 존재합니다. 제가 쓰고 있는 버전이 5.3이라 무언가의 차이점이 있는 것일까요..?
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
올려주신 코드를 빌드해보려 해도 MSB3073 -WaitMutex -FromMsBuild 에러가 발생합니다. 혹시 언리얼과 연동하기전에 기본적으로 해야할 설정이 있나요?? 비주얼스튜디오 인스톨에서 SDK와 언리얼 관련 내용은 다 다운로드 하였습니다. 언리얼 설정 시 기본 설정이 있다면 알려주시면 감사하겠습니다 ㅠㅠ
PossessedBy 함수가 서버에서만 호출되기 때문에 인풋에 관련된 함수를 다시 호출해 주는 것은 이해했는데요, SetupPlayerInputComponent 가 아닌 SetupGASInputComponent를 호출하는 이유가 뭔가요? GAS에 관련된 인풋 함수만 중복 호출 하는 이유가 궁금합니다.
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
>libprotobuf.lib(reflection_ops.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort 1>libprotobuf.lib(text_format.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort 1>libprotobuf.lib(dynamic_message.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort 1>libprotobuf.lib(any.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort 1>libprotobuf.lib(wire_format.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort 1>libprotobuf.lib(descriptor.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort 1>libprotobuf.lib(extension_set_heavy.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort 1>libprotobuf.lib(map_field.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort 1>libprotobuf.lib(arenastring.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort 1>libprotobuf.lib(message_lite.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort 1>libprotobuf.lib(generated_message_reflection.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort 1>libprotobuf.lib(message.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort 1>D:\UnRealProject\MMO\S1\Binaries\Win64\UnrealEditor-S1.dll : fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다. 소스 그대로 받아 빌드를 했는데 에러가 나네요
항상 친절한 답변해주셔서 너무너무 감사합니다 ㅜㅜ FRepMovement구조체 안에 변수들은 대부분 Transient속성을 사용하는데 (강의 내용 5분 ~~)Transient속성은 어떨때 쓰이는 걸까요? 전 강의에서 짤막하게 설명한다음 넘어갔던거 같은데 기억이 잘안나서요.. 검색을 해보니 직렬화를 해제하고 게임이 시작될때 마다 초기화가 되는 휘발성 변수라는 정보를 알게 되었는데 이게 무슨 말인지 잘 와 닿지 않아서요.. Transient 속성을 사용하면 어떤 효과가 있는걸까요?? 게임이시작될때 초기화 되는 변수라면 거의 대부분의 변수가 Transient로 설정될거같은데... 사용되는 예시도 같이 알려주시면 감사하겠습니다.. 네트워크에서 변수를 딱한번 쓰고 버리는 용도로 사용 되는것일까요?
지금까지 컨트롤에 관련된 강의를 들으면서 PlayerController는 무슨 역할을 하는지 궁금합니다. 제가 2~3강을 듣고 이해한 흐름은 다음과 같습니다. AABCharacterPlayer의 BeginPlay함수에서 맵핑 컨텍스트(IMC)를 설정하는데 PlayerController를 가져와 Subsystem을 선언하는데 쓰인다. (추후엔 SetCharacterControl로 바뀜) Subsystem은 IMC를 운영하는 클래스로 Subsystem에서 InputSystem을 가져와서 DefaultMappingContext을 맵핑 컨텍스트 에셋으로 추가한다. DefaultMappingContext는 AABCharacterPlayer의 CDO에서 주소값으로 가져온다. DefaultMappingContext는 IA_Jump, IA_Move, IA_Look가 등록된 IMC로 이걸 SubSystem에 등록시킨다. 이는 Move또는 Look함수에 있는 AddControllerYawInput 함수를 파보면 PlayerContoller에 Rotation값을 계속 갱신하는 것으로 움직인다는 것을 알 수 있다. 그렇다면 PlayerController는 그냥 GameMode에서 지정만 하고 실질적인 구현은 없는건가요?
안녕하세요. 해당 강의와 관련이 없는 내용일 수 있지만 질문드립니다. 로그인, 게임에 필요한 정보 등을 주고 받는 tcp나 http 통신을 하는 서버(이하 소켓 서버)와 소켓 통신을 하려고 한다면 (로그인으로 예를 들어보겠습니다) 로그인 레벨을 만들고 소켓 통신하는 부분을 로그인 레벨의 게임 모드에서 동작하게 하고 게임인스턴스에(클라이언트) 정보를 받고 다음 레벨로 넘어가면 될까요? 그 후에 리슨서버나 데디케이트 서버를 사용해서 인게임 로직을 구현한다면 플레이어 정보(아이템, 레벨 등)는 클라이언트에서 서버로 입장 시에 앞단계를 통해 클라이언트에서 유저를 식별할 수 있는 최소한의 정보를 받아서(예를 들면 플레이어id) 소켓 서버로 요청 후에 클라이언트로 복제하면 될까요? 아니면 앞단계를 통해 클라이언트에 정보를 미리 받고 최소한의 검증만 하면 될까요? 언리얼 서버에서 매치가 종료된 후 결과에 따른 보상이나 매치 중 소비하는 아이템(물약, 장비 내구도 등)같은 db 처리가 필요한 경우 언리얼 서버에서 처리하는지 별도의 서버에 요청하여 따로 처리하는지요? 작성하고 보니 질문이 이해가 되지 않을 수도 있을 것 같은데요. 질문의 요지는 인게임 로직을 처리하는 언리얼 서버가 아닌 따로 구현한 소켓 서버와 언리얼 엔진을 연동하는 과정에 대한 질문을 드리고 싶습니다. 틀렸거나 더 효율적인 방법이 있으면 답변 부탁드리겠습니다. 감사합니다
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
bool Handle_C_LEAVE_GAME(PacketSessionRef& session, Protocol::C_LEAVE_GAME& pkt) { auto gameSession = static_pointer_cast<GameSession>(session); PlayerRef player = gameSession->player.load(); if (player == nullptr) return false; RoomRef room = player->room.load().lock(); if (room == nullptr) return false; room->HandleLeavePlayer(player); return true; } 잡큐에서 처리를 한다면 문제가 발생하지 않을거로 보이지만, 잡큐에서 실행하지 않고 room->HandleLeavePlayer 함수를 직접 호출하고 있습니다. _objects 자료구조에 접근하여 제거하는데요 Thread Safe 하지 않을거로 보여서요. 혹시 의도된건지 궁금합니다. 코드 흐름상 이정도는 알아서 수정하세요라는 느낌이 강하지만 혹시나해서 여쭤봅니다.