728x90 반응형 UE5/UE5 MultiPlayerGame19 MultiPlayerGame) 20. 줍기 시스템 줍기 시스템 무기가 있더라도 아이템을 획득하지 못한다면 무기가 아니라 그냥 배경과 다르지 않을 것이다. 이번 포스팅에서는 아이템을 줍는것을 구현하고자 한다. 1.줍기 위젯 생성 먼저 유저인터페이스->위젯블루프린트를 생성하고 텍스트를 추가 해준다. 다음으로 C++에도 추가해준다. //Weapon.h private: UPROPERTY(VisibleAnywhere, Category = "Weapon") class UWidgetComponent* PickUpWidget; //Weapon.cpp #include "Components/WidgetComponent.h" AWeapon::AWeapon() { PickUpWidget= CreateDefaultSubobject(TEXT("PickUPWidget")); Pi.. UE5/UE5 MultiPlayerGame 2022. 6. 22. MultiPlayerGame) 19. 무기 시스템 무기 시스템 무기는 게임에 있어서 캐릭터만큼이나 중요한 요소이다. 보통 무기를 구현할때는 enum을 이용하여 구현을 한다. 무기 액터 생성 먼저 무기로 쓸 액터를 생성하고, 기본적으로 필요한 컴포넌트들(스켈레톤,충돌에 필요한 컴포넌트)을 추가하고 오브젝트와 콜리젼 설정을 해준다. //Weapon.h private: UPROPERTY(VisibleAnywhere,Category="Weapon") USkeletalMeshComponent* WeaponMesh; UPROPERTY(VisibleAnywhere, Category = "Weapon") class USphereComponent* AreaSphere; //Weapon.cpp #include "Components/SphereComponent.h" AWe.. UE5/UE5 MultiPlayerGame 2022. 6. 21. MultiPlayerGame) 17. SeamLess Travel / Non-SeamLess Travel 언리얼 엔진은 두가지 SeamLess Travel과 Non-SeamLessTravel이 있다. 언리얼에서는 SeamLess Travel쪽을 더 선호한다. 그렇다면 왜 SeamLess Travel을 선호하는지, 이 둘은 어떤식으로 작동하는지 알아보도록 한다. Non-SeamLessTravel 클라이언트가 원활하게 이동하지 않을 때마다 현재 서버에서 연결이 끊긴 다음 동일한 서버에 다시 연결한다. 이는 물론 다시 연결되는데 시간이 오래걸리고, 다른 연결할때 문제가 다른 레벨로 이동하는등의 문제가 발생할수 있다. Non-SeamlessTravel은 맵을 처음 로드할 때나 서버에 처음 연결할 때, 그리고 온라인 상태의 게임이 끝나고 새로운 게임이 시작될 때 사용된다. 모든 클라이언트는 연결을 끊었다가 다시 서버.. UE5/UE5 MultiPlayerGame 2022. 6. 16. MultiPlayerGame) 16. 애니메이션 리타겟팅 애니메이션 리타게팅 게임에서 캐릭터 애니메이션은 매우 중요한 요소 중 하나이다. 하지만 프로그래머 입장에서 캐릭터 애니메이션을 자체 제작하기에는 시간 및 숙련도와 같은 문제로 어려움을 겪는데, 애니메이션 리타겟팅은 이러한 문제점을 어느정도 해소해준다. 이 기술은 다른 모델의 조인트및 리깅을 적용하는 것이며, 이를 통해 이미 만들어져 있는 애니메이션을 적용하고 싶은 모델에 덮어쓰는 형식이다. 1.애니메이션 가져오기 먼저 UE마켓이나 Mixamo같은 곳에서 필요한 애니메이션을 가져온다. 믹사모 Mixamo www.mixamo.com 언리얼마켓 Unreal Engine Marketplace | Store of UE Assets for Games and 3D Rendering www.unrealengine.co.. UE5/UE5 MultiPlayerGame 2022. 6. 16. MultiPlayerGame) 15. UE5프로젝트 이전/플러그인 이식 UE5로 프로젝트 이전 최근 Epic에서 UE5를 정식 출시하면서 UE4에 대한 지원이 끊어진 상황이다. 하지만 아직까지 UE4와의 극명한 차이점은 느끼지 못하였지만 점점 UE5의 업데이트가 시작되어가고 있기에 UE5에 온라인 시스템을 이식시키려고 한다. 플러그인 이식 이전 포스팅까지 사용했던 UE4 플러그인 폴더이다. 새로운 UE5 프로젝트에 복사해준다. 다음으로 편집->플러그인->Online Subsystem Steam을 활성화 해준다. 다음으로 이전 포스팅에서 했던 것처럼 DefaultEngine.ini와 DefaultGame.ini을 수정한다. DefaultEngine.ini 수정 MultiPlayerGame) 4. 스팀연결 스팀연결 1.온라인 서브시스템 활성화 플러그인->온라인 서브시스템 스팀 .. UE5/UE5 MultiPlayerGame 2022. 6. 16. MultiPlayerGame) 14. 플레이어 추적을 위한 게임모드/게임스테이트 GameMode/GameState GameMode GameMode는 게임의 모든 룰을 유지하기 위해 존재한다. 플레이어가 레벨을 이동하는것과 스폰하는 위치와 같은 것을 관리하는것과 같은 것들이 포함되어 있다. PostLogin을 이용하여 게임에 참여하며 Logout을 이용하여 떠날수도 있다. GameMode는 GameState에 액세스 할수 있으므로 플레이어 스테이트 배열을 가져와서 볼수 있다. 이러한 기능을 수행하는것이 GameMode이다. GameState GameState는 게엠에 대한 상태 정보를 보유하도록 설계되었다. 클라이언트는 게임스테이트에 액세스하여 플레이어 정보를 얻을수 있다. 이 클래스는 점수나 승리 횟수 같은 특정 플레이어에 대한 정보가 아닌 게임 상태 정보를 저장하기 위해 설계된 클.. UE5/UE5 MultiPlayerGame 2022. 6. 14. MultiPlayerGame) 13. 서브시스템 콜백함수 서브시스템 콜백함수 1.지금까지 진행 사항 게임인스턴스서브시스템을 기반으로 한 멀티플레이어 세션서브시스템 클래스에서 세션 인터페이스 기능에 액세스 하고 있다. 서브시스템은 몇가지 델레게이트 함수를 가지고 있는데, 이것은 세션인터페이스 함수를 호출 할때 자체 콜백을 가질수 있게 한다. 메뉴클래스는 서브시스템 함수를 호출하고, 서브시스템 함수는 세션인터페이스 함수를 호출하고 있다. 세션 인터페이스 함수(CreateSession)를 호출하면 세션 인터페이스가 델레게이트 리스트를 통해 반복되며, 여기에 추가한 델레게이트를 찾고 멀티플레이어 세션 서브 시스템 클래스에 존재하는 콜백을 호출한다. 하지만 그 정보를 메뉴 클래스에 다시 가져오는 방법은 어떻게 해야될 것인가? 이를 위해서 서브시스템에 서브시스템 델레게이.. UE5/UE5 MultiPlayerGame 2022. 6. 14. MultiPlayerGame) 12. 세션 만들기 세션 만들기 로컬네트워크에서 했던것 처럼 CreateSession의 SessionInterface에 델레게이트 핸들에 델레게이트를 설정하고 만들어 두었던 델레게이트 핸들에 저장한다. 이렇게 하면 나중에 델레게이트 리스트에서 델레게이트를 삭제할수 있다. 그후 세션세팅을 설정해준다. 세션만들기 참조하기 MultiPlayerGame) 4. 스팀연결 스팀연결 1.온라인 서브시스템 활성화 플러그인->온라인 서브시스템 스팀 활성화->UE재시작 2.코드수정 build.cs에 "OnlineSubsystem","OnlineSubsystemSteam"추가 PublicDependencyModuleNames.AddRange(new str.. pjnull.tistory.com 1.CreateSession 구현 //Multipl.. UE5/UE5 MultiPlayerGame 2022. 6. 13. MultiPlayerGame) 11. 서브시스템 액세스 1.버튼 콜백 생성 UButton The button is a click-able primitive widget to enable basic interaction, you can place any other widget inside a button to make a more complex and interesting click-able element in your UI. docs.unrealengine.com //Menu.h class UButton; protected: virtual bool Initialize()override; private: UPROPERTY(meta = (BindWidget)) UButton* Host_Btn; //위젯의 버튼 이름과 동일해야됨 UPROPERTY(meta = (B.. UE5/UE5 MultiPlayerGame 2022. 6. 13. MultiPlayerGame) 10. 메뉴클래스 메뉴클래스 메뉴를 만드는 방법은 다양하다. 그럼에도 메뉴클래스를 만드는 이유는 한번 제작하면 새프로젝트에서 다시 만들 필요없다는 점에 있다. C++클래스를 만든후 블루프린트로 상속받을 예정이다. 1.메뉴클래스 생성 우선 위젯클래스를 생성해준다. 그후, 위젯을 사용하기 위해서 build.cs에 모듈을 추가해준다. //MultiplayerSession.Build.cs PublicDependencyModuleNames.AddRange( new string[] { "UMG", "Slate", "SlateCore" } ); 모듈을 추가했다면 기본적인 위젯설정을 해준다. //Menu.h public: UFUNCTION(BlueprintCallable) void MenuSetUp(); //Menu.cpp void U.. UE5/UE5 MultiPlayerGame 2022. 6. 9. MultiPlayerGame) 9. 세션인터페이스 델레게이트 설정 델레게이트 설정 이전 포스팅에서 온라인세션을 관리하기 위해 세션 인터페이스 기능을 사용하였다. 이번 포스팅에서는 함수(CreateSession,FindSession,JoinSession,StartSession,DestorySession),델레게이트,콜백함수,델레게이트 핸들을 생성할 예정이다. 이러한 기능들은 세션 인터페이스에 존재하지만, 다른 클래스에서 서브시스템에 액세스할 있게 자체 서브시스템에서 처리할 수 있도록 몇몇 기능을 추가하는 것이다. 1.함수 추가 //MultiplayerSessionSubsystem.h public: void CreateSession(int32 NumPublicConnections, FString MatchType); void FindSession(int32 MaxSearc.. UE5/UE5 MultiPlayerGame 2022. 6. 9. MultiPlayerGame) 8. 자체 서브시스템 생성 게임세션을 처리 할때 게임 인스턴스 클래스를 이용한다. 게임 인스턴스 클래스를 만들면 게임 생성시 게임 인스턴스가 생성되게 되며 게임이 종료 될때 까지 없어지지 않는다. 또한 레벨간에 지속되므로 다른 레벨로 이동할때도 동일한 레벨을 갖게 된다. 게임인스턴스 및 서브시스템을 사용해야되는 이유등은 아래의 문서에서 확인 할 수 있다. 프로그래밍 서브시스템 언리얼 엔진 4 의 프로그래밍 서브시스템 개요입니다. docs.unrealengine.com 자체 서브시스템 생성 새로운 C++클래스생성->GameInstanceSubsystem->MultiplayerSession(폴더)지정->해당 프로젝트에서 Binary,intermediate,save파일을 삭제->Generate Visual Stdio->실행 생성을 마쳤.. UE5/UE5 MultiPlayerGame 2022. 6. 7. 이전 1 2 다음 728x90 반응형