728x90 반응형 전체 글161 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. MultiPlayerGame) 7. 플러그인 생성 언리얼 엔진 플러그인 언리얼 엔진의 플러그인은 특정 목적을 위해 설계된 코드 및 데이터모음이다. 각 프로젝트마다 개발자가 쉽게 사용 여부를 설정할 수 있으며 런타임 게임플레이나 에디터에 기능을 추가할수 있다. 이러한 엔진 플러그인은 엔진내의 플러그인 에디터에서 비/활성화 할 수 있다. 그렇다면 플러그인은 무엇일까? 플러그인 플러그인은 하나 이상의 모듈로 구성되어 있다. 즉 플러그인은 모듈의 집합이다. 그렇다면 모듈은 무엇인가? 모듈 모듈은 엔진의 빌딩블록(기본적인 회로)이다.엔젠 자체는 모듈을 모아둔 큰 컬렉션으로 구현되며, 각 모듈은 별개의 C++코드로 구성되어 있으며 캡슐화하는 빌드파일을 포함한다. 모듈은 단지 코드이여서 메쉬나 텍스처와 같은 에셋을 포함하지 않는다. 이를 통해 개별 작업을 캡슐화하며.. UE5/UE5 MultiPlayerGame 2022. 6. 7. MultiPlayerGame) 6. 세션에 참여 1.로비 레벨 만들기 먼저 새로운 레벨을 만든다.(파일->새 래벨->이름:Lobby) 그 후 캐릭터와 연결시킨다. //Character.cpp void _Character::OnCreateSessionComplete(FName SessionName, bool bWasSuccessful) { if (bWasSuccessful) { UWorld* world = GetWorld(); if (world) { world->ServerTravel(FString("로비레벨의 경로?listen")); } } } 2.매치타입 특정하기 SessionSettings에서 추가 데이터를 지정할 수 있으므로 세션을 찾은 후 확인할 예정이다. SessionSettings에서 Set을 사용하면 세션을 찾은 후 확인할 수 있는 세션과.. UE5/UE5 MultiPlayerGame 2022. 6. 4. MultiPlayerGame) 5. 참가세션 만들기 1.JoinGameSession만들기 //Character.h protected: UFUNCTION(BlueprintCallable) void JoinGameSession(); void OnFindSessionComplete(bool bWasSuccessful); 2.델레게이트와 콜백설정 /Character.h protected: void OnFindSessionComplete(bool bWasSuccessful); private: FOnFindSessionsCompleteDelegate FindSessionCompleteDelegate; TSharedPtrSessionSearch; //Character.cpp _Character::_Character(): FindSessionCompleteDelegat.. UE5/UE5 MultiPlayerGame 2022. 6. 3. 이전 1 ··· 6 7 8 9 10 11 12 ··· 14 다음 728x90 반응형