UE5 Issues - 서버 & 클라이언트 로직
·
Unreal Engine
보호되어 있는 글입니다.
UE5 Issues : 데디케이트 서버 UI에 관해
·
Unreal Engine
멀티플레이 게임에서 UI를 개발함에 있어서 고려할 만한 점이 있다. Owner설정UI의 OwnerUI에 띄울 정보를 가질 Owner 보이는 곳Owner에게만 보여줄 것인가다른 유저들에게도 보여줄 것인가위젯에서 표시할 값이 어디에서 변하는가서버에서 변경클라이언트에서 변경1. Owner 설정과 보여지는 곳예를 들어, 우리가 자신의 체력 바를 만든다고 했을 때를 생각해 보자UI의 Owner는 나 자신이고, 띄울 정보의 Owner도 나 자신이다.보여지는 곳은 나 자신이 될 것이다.이 경우는 크게 생각할 문제가 없다.그러나 우리가 다른 플레이어의 체력 바를 또한 띄우고 싶다면UI의 Owner는 나 자신이지만, 띄울 정보는 다른 플레이어의 정보이다.보여지는 곳은 여전히 나 자신이 된다.이 경우 해당 Widget을 ..
Unreal Engine - 데디케이티드 서버 11 (콤보 공격 최적화)
·
Unreal Engine
1. 언리얼 인사이트언리얼 프로파일링 툴인 Unreal Insights를 통해서 최적화 테스트를 해 볼 생각이다. 1 - 1. 설정언리얼 엔진을 다운로드한 경로로 가서 아래와 같이 UnrealInsights.exe 파일을 찾는다.일반적으로 아래와 같은 경로로 저장된다. C:\Program Files\Epic Games\UE_5.5\Engine\Binaries\Win64쉽게 사용하기 위해 환경변수에 등록을 한다이후 프로파일링을 하고자 하는 프로젝트가 있는 폴더로 들어가서 bat 파일을 만들어준다내용은 아래와 같이 환경변수를 사용하여 만들면 된다.UnrealEditor.exe %cd%\SCC_DedicatedX.uproject -NetTrace=1 -Trace=Net 1 - 2. 사용bat 파일을 더블클릭하..
Unreal Engine - 데디케이티드 서버 10 (콤보 공격)
·
Unreal Engine
1. 플레이어 쪽 함수 세팅새로운 인풋 액션인 IA_ComboAttack을 추가한 후 Input Binding 진행Section을 사용해야 하기 때문에, SectionName에 사용할 변수를 추가//헤더FName ComboAttackSectionName;FName DefaultComboAttackSectionName;//cppvoid ADXPlayerCharacter::HandleComboAttackInput(const FInputActionValue& InValue){ if (!HasAuthority() && IsLocallyControlled()) { PlayAnimMontage(ComboAttackMontage, 1.f, ComboAttackSectionName); //ServerRPCCombo..
UE5 Issues - Dash Skill (데디케이티드 서버)
·
Unreal Engine
1. Dash 애니메이션 세팅Dash 애니메이션 같은 경우는 대체로 Root Motion 애니메이션이 많다.그러나 우리가 원하는 속도나 거리, 시간을 이동시키기 위해서는 루트 모션을 사용하지 않고, 아래와 같은 세탕으로 코드를 잠금시킨 후 코드에서 움직이도록 하였다. 해당 애니메이션을 이용해 애니메이션 몽타주를 만들어 주면 된다. 2. 스킬 시스템과 연동현재 스킬은 아래와 같은 구조로 구성되어 있다.UObject를 상속받은 SkillBase 를 상속하여 만든 각각의 스킬 클래스 (실제 스킬의 실체)UActorComponent를 상속받은 SkillComp를 통해 스킬 사용스킬을 사용하는 흐름은 아래와 같이 정리할 수 있다.PlayerController와 IMC 바인딩void AGS_GuardianCont..
Unreal Engine - 데디케이티드 서버 9 (게임 종료)
·
Unreal Engine
1. 캐릭터 Death 처리 흐름StatComponent의 OnOutOfCurrentHP -> PlayerCharacter와 Delegate 바인딩PlayerCharacter -> PlayerControllerPlayerController -> GameMode 코드//게임 모드void ADXGameModeBase::OnCharacterDead(ADXPlayerController* InController){ if (!IsValid(InController) || AlivePlayerControllers.Find(InController) == INDEX_NONE) { return; } AlivePlayerControllers.Remove(InController); DeadPlayerControllers.Ad..
Unreal Engine - 데디케이티드 서버 8 (게임 흐름)
·
Unreal Engine
1. PlayerController타이틀 전용 컨트롤러 및 맵 추가 동작 모습게임 시작 전 start 화면 구현Start 버튼을 누르면 Join Server 수행 구조Title Level (새로운 레벨 추가)GameModeBase_Title (새로운 GameMode 추가)DXTitlePlayerController (새로운 PlayerController 추가 -> 위젯 띄워주기)구현 내용ADXTitlePlayerControllervoid ADXTitlePlayerController::BeginPlay(){ Super::BeginPlay(); if (!IsLocalController()) { return; } //not server if (IsValid(UIWidgetClass)) { UIWidgetI..
Unreal Engine - AI (2)
·
Unreal Engine
1. AI 애니메이션 구현1 - 1. Overview캐릭터와 AI의 입력 방식의 차이점캐릭터플레이어의 입력을 받은 후 AddMovementInput을 통해 이동 처리가 이루어진다."입력값"에 따라 애니메이션 블랜딩을 수행AIAIController가 이동 및 행동을 결정, MoveToActor 또는 MoveToLocation을 통해 내비게이션 기반 이동 처리"AI의 상태 (이동속력 등)" 에 따라 애니메이션 변경애니메이션 전환 방식캐릭터애니메이션 BP에서 플레이어의 입력값을 기반으로 Speed나 Direction 값을 세팅,Speed나 Direction 등의 변수를 통해 애니메이션 전환AIBT나 BB에서의 AI 행동감지 또는 애니메이션 BP로직으로 애니메이션 변경MoveTo 등의 함수를 통해 움직임이 실행..
Unreal Engine - AI (1)
·
Unreal Engine
1. NavMeshBoundVolume1 - 1. OverviewNavMeshBoundVolume은 AI가 움직이는 영역을 정의할 수 있는 범위를 말한다.액터 배치 -> 볼륨 -> 내비메시 바운드 볼륨 해당 볼륨의 특징으로는 기본적인 세팅에서는 동적인 범위 생성이 불가능하다는 점이다.아래와 같이 레벨에 설치 후 단축키 P를 통해서 내비메시가 깔린 범위를 체크할 수 있다. 그러나 게임 플레이 도중, 장애물이나 여러 움직임에 따라 내비메시의 범위를 조절하고 싶다면, Dynamic 설정을 해주어야 한다.프로젝트 세팅 -> 엔진 -> 네비게이션 메시 -> 런타임 -> 런타임 생성디폴트 값으로는 static으로 되어있지만, 동적으로 생성하기 위해서는 dymamic을 선택해주면 된다. 1 - 2. Dynamic 종..
Unreal Engine - 멀티플레이 네트워크 최적화 2
·
Unreal Engine
https://gbleem.tistory.com/166 Unreal Engine - 멀티플레이 네트워크 최적화 11. Recap1 - 1. Server - Client 모델언리얼 엔진은 멀티플레이 게임에서 Server-Client 구조를 사용한다.서버만이 결정을 내리며, Authority를 가진다.클라이언트끼리는 직접 통신하지 않는다.클라이언트에서gbleem.tistory.com위의 글에서 이어지는 내용입니다. 3. Actor Replication Optimization3 - 1. Network Bandwidth 관리네트워크 bandwidth는 한정된 자원이기 때문에, 항상 중요한 정보는 놓치지 않고 불필요한 데이터는 줄이는 과정이 필요하다3 - 1 - 1. Relevancy"액터"가 "클라이언트"에게 ..