728x90

Study/Project 43

VV 7. 자석 아이템 추가

VV자석 아이템을 추가했다.모델링 된 자석을 가져오고 Metalic한 느낌을 주기위해서 값을 추가해줬다.자석에 대한 블루프린트를 만들어주었다. delay와 for loop for delay를 만들어줘서 자석을 획득하면 5초동안 효과가 진행되고 꺼지게 만들었다.코인과 장애물과 같이 스폰하는 함수를 만들어줬다.코인에는 Sphere collision을 추가해두고 크기를 크게 만들어 주었다. 그리고 sphere에 따른 추가적인 블루프린트를 만들어서 자석을 획득했을때의 작동을 구현해두었다.추가적으로 UI에도 자석을 획득했을 때 지속시간이 표시되도록 추가해주었다.

Study/Project 2024.11.08

VV 6. 장애물, UI 구현, 점수 구현

VV움직임을 구현했으니 장애물을 만들 차례이다.두 가지 장애물을 만들어주고 collision을 주었다.장애물에 닿는 순간 게임오버되야 하기 때문에 Character에 Death 함수를 추가 시켜주었다.장애물들에게 Death함수를 추가시켜주어 overlap되었을 때 게임이 종료되도록 구현했다.BP_Floor에 랜덤으로 Spawn되는 함수를 구현해주었다.RandomSpawnPoint에 Obstacle이 생성되도록 구현을 해주었다.장애물에 닿으면 게임이 종료하게 되는데 그것을 위한 UI를 구현해줬다.게임오버 UI는 Restart 버튼과 Exit 버튼으로 구성하고, 화면은 블러처리가 되도록 했다.이제 게임을 플레이하면서 점수를 체크하도록 해야한다.게임 플레이시 점수를 띄워줄 UI를 만들어주었다. UI에는 Coi..

Study/Project 2024.11.04

VV 5. 움직임 구현 (Infinity Run), 점프, 슬라이드

VV첫번째 게임은 일단 템플런 같은 Infinity Runner형태의 게임을 만들 생각이다.로그인이 성공하면 게임에 접속해야 하기에 레벨 전환부터 만들어주었다.void UNetworkManager::ProcessResponse(const TArray& ReceiveData){ if (ReceiveData.Num() MsgID) { case EMessageID::LOGIN_RESPONSE_MSG_ID: { if (Header->Attribute == 0) { UE_LOG(LogTemp, Log, TEXT("Login successful!")); //TODO 로그인 성공 UGameplayStatics::..

Study/Project 2024.10.30

VV 4. 클라이언트 수신

VV서버에서 로그인 과정을 거쳤으니 그 결과를 다시 클라이언트에 보내줘야 한다. 나는 결과에 따라서 다른 프로토콜을 쓰는게 아니라 같은 프로토콜로 대신에 attribute에 다른 값으로 성공했는지 실패했는지 알아볼 수 있도록 구성했다.bool OnDataHandle(IDataBuffer* pDataBuffer, int32_t nConnID){ if (pDataBuffer == nullptr) { CLog::GetInstancePtr()->LogError("Received null data buffer in OnDataHandle."); return false; } PacketHeader* pHeader = (PacketHeader*)pDataBuffer->G..

Study/Project 2024.10.29

VV 3. 로그인 기능

VV서버와의 연결이 성공했으므로 서로 정보를 전달할 수 있어야 한다.로그인 UI가 있으므로 ID, PW TextBox에 입력한 Text를 로그인 버튼을 누르면 서버로 전송해야 한다.// LoginWidget.hUCLASS()class VERSUSVILLAGE_API ULoginWidget : public UUserWidget{ GENERATED_BODY() public: virtual void NativeConstruct() override; UFUNCTION() void OnLoginButtonClicked();protected: UPROPERTY(meta = (BindWidget)) class UEditableTextBox* IDTextBox; UPROPER..

Study/Project 2024.10.29

VV 트러블 슈팅 1. MSB3073 에러, NewObject with empty name can't be used to create default subobjects 에러

MSB3073 에러MSB3073에러가 발생해서 빌드가 안되는 문제를 겪었다.VS를 다시 켜보거나 Binaries를 삭제하고 리빌드 하는 과정을 거쳤지만 문제가 해결되지 않았다.해결 방법Build.cs 파일 수정FSocket 및 네트워킹 관련 기능을 사용하기 위해서는 프로젝트의 .Build.cs 파일에 필요한 모듈을 추가해야 했다.프로젝트 폴더에서 .Build.cs 파일을 열어서 PublicDependencyModuleNames에 필요한 모듈을 추가해주었다.나는 Sockets 와 Networking 모듈이 필요했기에 추가해주었다.PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "S..

Study/Project 2024.10.24

VV 2. 서버와의 연결

서버와의 연결간단한 로그인 UI를 만들었고, 이번에는 C++서버와의 연결을 준비했다. C++ 서버의 경우 최흥배님의 깃헙을 참조해 사용했다.NetworkManagerNetworkManagerMyGameInstance에서 다 해결해주는 것이 아니라, 서버와의 연결을 담당해줄 클래스를 만들어 주었다.NetworkManager.h//NetworkManager.hUCLASS()class VERSUSVILLAGE_API UNetworkManager : public UObject{ GENERATED_BODY() public: bool ConnectToServer(FString ServerAddress, int32 Port); void SendData(FString DataToSend);private: class F..

Study/Project 2024.10.24

VV 1. 로그인 UI

VV로그인 UI언리얼 엔진의 프로젝트를 본격적으로 포스팅 해보려고 한다.이번 목표는 로그인 UI를 만드는 것이다.Unity에서 쉽게 panel을 이용했던 것과는 다르게 좀 언리얼은 복잡해서 다른 여러 블로그를 참조하면서 진행했다.Ctrl+Space 를 통해 Content Browser를 열고, 빈 곳에서 우클릭을 통해 User Interface → Widget Blueprint를 눌러줘서 생성해주었다.User Widget을 눌러서 생성해주었다.이런 창이 열리게 되는데 화살표 버튼을 드래그 해보면 화면 영역이 나타나게 된다.여기서 만드려고 하는 화면 비율을 따라서 선택해주면 된다.나는 1920x1080으로 선택했다.옆의 Palette를 통해서 원하는 UI를 드래그 드롭시켜주었다.간단하게 만든 텍스트 박스와..

Study/Project 2024.10.23

슬레이어즈_동기화 피드백

슬레이어즈 트러블 슈팅 관련 피드백동기화 문제 관련내가 했던 방식_초당 일정 개수의 패킷을 보내는 방식장점예측 가능성패킷 전송 주기가 일정하여 네트워크 부하를 예측하고 관리하기 쉽다.간단한 구현주기적인 타이머를 사용하여 패킷을 전송하므로 구현이 상대적으로 간단하다.단점비효율성실제로 상태 변화가 없는 경우에도 불필요한 패킷이 전송될 수 있어 네트워크 부하가 증가할 수 있다.반응성 저하입력 이벤트가 발생한 순간과 패킷 전송 사이에 지연이 발생할 수 있어, 반응성이 떨어질 수 있다.입력 이벤트에 따라 패킷을 보내고, 그 사이를 보간하는 방식장점높은 반응성입력 이벤트 발생 시 즉시 패킷을 전송하므로, 반응성이 높아진다.효율성상태 변화가 있을 때만 패킷을 전송하므로, 네트워크 부하를 줄일 수 있다.단점복잡한 구현..

Study/Project 2024.06.18

슬레이어즈_구분자 프레이밍 피드백

슬레이어즈 트러블 슈팅 관련 피드백패킷이 뭉쳐서 들어오는 문제 관련구분자 프레이밍으로 문제를 해결했는데, 잘은 동작하지만 확장성이 낮고, 문제가 생길 가능성이 크다.그런 이유로 구분자 프레이밍이 아닌 헤더-바디 프로토콜을 사용하면 이러한 문제를 해결할 수 있다.구분자 프레이밍에 문제가 있다.구분자의 충돌 가능성데이터 내용에 구분자와 동일한 패턴이 포함될 수 있다. 이 경우, 실제 데이터와 구분자를 혼동할 수 있어 데이터 패킷의 경계가 잘못 인식될 수 있다.이 문제를 해결하기 위해 데이터를 전송하기 전에 구분자를 이스케이핑(escaping)하거나, 데이터 인코딩 방식을 변경해야 하는데, 이는 추가적인 처리 비용을 초래한다.비효율성구분자가 포함된 데이터를 처리할 때, 구분자를 찾아야 하므로 문자열 검색 연산..

Study/Project 2024.06.18
728x90