void AABCharacterPlayer::Look(const FInputActionValue& Value) { //마우스 입력 같음 FVector2D LookAxisVector = Value.Get<FVector2D>(); //컨트롤러의 회전을 설정함으로서 스프링암이 해당 컨트롤러를 바라보도록 한다...? AddControllerYawInput(LookAxisVector.X); AddControllerPitchInput(LookAxisVector.Y); } 저는 컨트롤러를 그냥 마우스/키보드 입력을 처리하거나 입력값을 자신이 빙의한 폰에 넘겨주는 역할을 하는 무형의 클래스라고 생각하고 있었는데요. 컨트롤러의 회전을 설정함으로서 스프링암이 해당 컨트롤러를 바라보도록 한다. 라는 설명에서는 카메라를 제어하는 듯한 의미같은데 설명의 의미와 컨트롤러와 카메라의 관계를 잘 모르겠습니다... 컨트롤러가 빙의 되면 폰이 가지고있는 카메라 컴포넌트를 자동으로 컨트롤러가 참조하게 되고, AddControllerYawInput() 같은 함수를 통해 컨트롤러에 회전값을 주면 카메라를 제어하는 그런 시스템일까요??? 또, 그 카메라가 스프링암이 있다면 스프링암 위치와 떨어진 거리 기준으로 공전하는 회전이 적용되는 그런 의미일까요??
void AABCharacterPlayer::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); // 반드시 UInputComponent를 가져올 수 있도록 CastChecked를 사용해서 없으면 에러 발생되게 함 UEnhancedInputComponent* EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(PlayerInputComponent); ... } SetupPlayerInputComponent 라는 함수와 매개변수인 UInputCompononent가 무엇인지 전체적인 그림이 잘 그려지지 않습니다.... 지금은 향상된 입력을 수행하는 녀석이라고 이해하고 있는데 보니까 BeginPlay() 하기전에 실행되기도 하고..... UInputCompononent가 어디에서 온건지, 커스텀으로 에디터에서 만들고 등록할 수 있는건지. 전반적인 이해가 필요한데요. 이 함수와 매개변수에 대한 자세한 건 나중에 또 나오나요??
이 예제처럼 클래스 정보를 얻어와 적용해 사용한다는 뜻은 엔진 내부적으로 받은 클래스 정보에 따라 인스턴스를 스스로 만들어 사용한다고 보면 되는 건가요?? AABPlayerController 클래스의 인스턴스를 직접 만들었다면 고칠꺼 고치고 GetClass()를 통해서 넣으면 되는 걸까요? 그리고 TSubclassOf의 효과를 알 수 있을 까요... 찾아보니 지정한 UClass 파생 클래스로만 할당 할 수 있어서 안전하다.. 이런 얘기가 있는데 잘 모르겠네요ㅜㅜ
1강 강의 대로 PlayerController를 변경한 후 캐릭터 조작이 안되는 문제를 겪고 있습니다. 1강 언리얼 엔진 게임 제작 기초 강의 그대로 따라하고 있었는데요. 23:21 부분 따라한 이후 부터는 캐릭터 뿐만 아니라 카메라도 이동이 되지 않고 있습니다. 재컴파일도 해보고 아예 새 프로젝트부터 다시 만들어보기도하였는데요. 동일한 현상 때문에 애를 먹고 있습니다. 어떻게 해결하면 좋을지 여쭤보고 싶습니다. 아래는 조작이 안되는 상태 스크린샷입니다. (키보드나 마우스 움직여도 캐릭터가 움직이질 않음)
로직은 Valid 체크 후 true일 때만 actor의 위치를 변경하도록 되어 있는데 왜 false인데 위치가 변경된 것일까요? 설명도 "원래는 이동할 수 없지만 어찌됐건 이 그리드 단위를 기준으로 얘가 해당하는 그 월드 좌표를 구해 가지고 일단 이렇게 이동을 시켰다는 걸 알 수가 있는거죠" 라고 해주셨는데 어찌됐건, 일단이라는 부분이 잘 이해가 가지 않습니다. 언리얼 엔진의 오류라고 봐야하는 부분인 지, GetTilePos를 순수 함수로 체크한 것이 영향이 있는 건지 궁금합니다 (이론적으로는 영향이 없겠지만 이게 오류의 원인인건지).
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
저희 프로젝트에서 클라이언트의 네트워크 모델은 WSAEventSelect 모델, 서버의 네트워크 모델은 IOCP 모델이 맞을까요?? 서버의 모델은 IOCP 라는 걸 확실히 알겠는데 클라이언트의 네트워크 모델도 IOCP 인건지 WSAEventSelect 인지 이해가 잘 안갑니다..!! 클라, 서버 둘다 메인스레드 하나로 처리한다고 하셔서 헷갈려서 여쭤봅니다 ㅠㅠ
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
// CP 생성 HANDLE iocpHandle = ::CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0); // WorkerThreads for (int32 i = 0; i < 5; i++) GThreadManager->Launch([=]() { WorkerThreadMain(iocpHandle); }); 각 워커 스레드는 별도의 iocpHandle을 사용해서 WorkerThreeadMain 함수를 실행하는 걸까요? iocpHandle 은 하나의 공용적인 큐 일까요?
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
Overlapped Callback 방식에서 Session 구조체의 맨 첫 요소로 overlapped 를 넣어줘야하는 이유가 나중에 포인터로 변환하기 위해 메모리 구조상 넣는 거라고 하셨는데 이 부분이 잘 이해가 안가서 여쭤봅니다... 배열의 이름이 배열의 주소인 것처럼 구조체의 첫 요소가 구조체의 주소라서 그런건가요..??
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
vector<shared_ptr<object>> v; 라는것을 사용했을때 , shared_ptr 은 생명주기가 다하면 알아서 자동으로 소멸되는데 vector 안에 object 를 넣게되면은 object 의 생명주기 가 연장되는건가요 ? 만약에 생명주기가 연장되었다고 했을때 vector<shared_ptr<Object>>& v = ObjectManager::GetInstance()->Get_Object(); for (int i = 0; i < v.size(); ++i) { v[i]->Update(); } 위처럼 벡터의 참조값을 를 가져와서 update 도중 vector 안에 원소를 reset 하여 참조카운트가 0 이되어 삭제된다 치면은 썡포인터와 다를게없어지는거아닌가욤?
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
제가 이해하기론 서버에서 플레이어를 생성하고 처음 네트워크 통신 간 세션에 클라이언트가 등록되었을 때 클라이언트와 서버에서 생성한 플레이어를 붙이는 것으로 이해했습니다. 혹시 그럼 처음 통신을 했을 때는 클라이언트가 서버에 보내는 패킷에 초기값을 전달 후 서버에서 설정해서 다시 패킷을 send 해주는 방식으로 이해했는데 제가 이해한 방식이 맞는 것인지 궁금합니다.
핸드폰에서 실행하려고 하면 ERROR: cmd.exe failed with args /c "C:\Users\admin\Documents\Unreal Projects\crazy\Intermediate\Android\armv7\gradle\rungradle.bat" :app:assembleDebug 라고 뜹니다 아무리 검색을 해봐도 해결이 안되어 3주라는 긴 시간을 소모한 끝에 이렇게 글 남깁니다 언리얼 버전은 4.27.2 이고 폰은 갤럭시S9+로 안드로이드버전은 10입니다 강의가 1년 전 영상이라 그런지 똑같이 따라해도 안되는 부분이 많네요 강의에서 나오는 CodeWorksForAndriod는 이제는 더 이상 사용하지 않는다고 하고 안드로이드 스튜디오 4.0 버전을 다운 받아서 시도했는데도 안되네요
1강 15:10에 c++ 클래스를 생성하고 컴파일 에러가 뜨는데 이게 경로가 안 맞아서 그렇다고 하시는데 어떤 경로를 말씀하시는 건가요?? 임의의 폴더를 추가해서 C++파일을 추가할 경우는 항상 이렇게 컴파일 에러가 뜰까요? 그리고 build.cs 파일에 PublicIncludePath 경로 추가할 때 "ArenaBattle"이라고 하는 모듈은 에디터에서 게임을 처음 만들 때의 이름을 말씀하시는 걸까요? 만약에 제가 스스로 ArenaWar라는 게임을 만들면 "ArenaWar"라고 추가하면 되는 것 일까요?