분류 전체보기 123

[UE5] 멀티플레이어 게임 폴리싱 (4) - 렉 최적화 마무리

프로젝트 팀장 분과 의논을 한 뒤, 마무리 수정을 몇가지 하게 되었다. 우선 NetworkSimulatedSmoothLocationTime, ListenServerNetworkSimulatedSmoothLocationTime 두 변수의 활용에 대해서이다. 두 변수의 역할은 다음과 같다. NetworkSimulatedSmoothLocationTime: 클라이언트내 서버 pawn 위치를 보정하는 시간ListenServerNetworkSimulatedSmoothLocationTime : 서버 내 클라이언트 pawn 위치를 보정하는 시간 이전 코드는 서버, 클라이언트 할 것 없이 각각의 머신에서 무조건 저 두 변수의 값을 변경하는 방식으로 했지만,사실 클라이언트에서는 NetworkSimulatedSmoothLo..

[UE5] 멀티플레이어 게임 폴리싱 (3) - 렉 최적화 (회전 에러 수정, 핑 측정 후 조정 기능)

이번엔 클라이언트 캐릭터의 움직임이 버벅거리는 문제를 수정해보았다. https://youtu.be/l6-zIF9JFWg 처음엔 서버에서 강제로 클라이언트의 움직임 오차를 잘못 체크하고 있어 발생한 문제인가 싶어 디테일 패널에서 클라이언트 오차 조정 옵션을 아예 꺼봤는데도 문제가 계속되었다. 지난 포스팅에서 캐릭터의 TickPose가 네트워크가 아닌 메쉬의 Tick에 의해서 작동되도록 했는데, 혹시 TickPose가 내 예상과는 다르게 한 프레임에 여러번 실행되어서 그랬나 싶어서 코드를 고쳐 네트워크에 의한 TickCharacterPose는 막아보았는데도 문제가 계속되었다. 이외에도 포럼을 뒤져가며 갖가지 방법을 시도해봤지만, 해결되지 않았다. 계속 고민하며 테스트를 반복하다보니, 유심히 보니까 캐릭터..

[UE5] 멀티플레이어 게임 폴리싱 (2) - 렉 최적화 (카메라, 애니메이션, 보간 시간)

(이하 작업은 모두 Editor Preference에서 Network Emulation을 Bad로 두고 하였다.) 렉이 걸리는 상황을 유심히 본 결과, 카메라가 드드득 움직이는 것이 플레이어 입장에서 렉을 더 심하게 느끼게 한다는 생각이 들었다. 따라서, 캐릭터의 CameraBoom의 EnableLag을 활성화시켜주었다.Camera Boom에서의 Lag란, 한마디로 캐릭터를 부드럽게 따라가는 효과를 의미한다.AISeeMeCharacter::AISeeMeCharacter(){ //... CameraBoom = CreateDefaultSubobject(TEXT("CameraBoom")); //... // 카메라 부드럽게 움직이도록 CameraBoom->bEnableCameraLag = true; Camera..

[UE5] 멀티플레이어 게임 폴리싱 (1) - 렉 최적화 개요

올해 9월에 드디어 게임 개발 연합동아리에서 팀원들과 함께 개발한 게임을 스팀에 출시를 하게 되었다.https://store.steampowered.com/app/3623670/I_See_Me/ I See Me on SteamOvercome the trials by relying on your partner's sights! A 3D co-op game that goes beyond common sense. Enjoy unique gameplay based on sights in I See Me.store.steampowered.com 해당 프로젝트에서 내 역할은 다음과 같다.스팀 친구 초대 / 도전과제 기능 구현상대 캐릭터 바라보기 / Q, E로 상대 시점 pitch 조정 등 캐릭터 특수 조작바람 기믹..

[UE5] 시네마틱 보스배틀 게임 개발일지 (6) - 리팩토링, 데미지 시스템 구현

우선 지난번 회고를 토대로, TitanCharacter(플레이어 캐릭터)와 BossCharacter 간 중복되는 코드를 묶어 CharacterBase로 정리해주었다.// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "GameFramework/Character.h"#include "AbilitySystemInterface.h"#include "GameplayTagContainer.h"#include "GameplayTagAssetInterface.h"#include "GameplayAbilitySpecHandle.h"#include "Ti..

[UE5] 시네마틱 보스배틀 게임 개발일지 (5) - 플레이어 준비 + 콤보 공격 구현(모션 매칭, GAS)

플레이어의 로코모션은 기본적으로 모션 매칭을 사용할 것이다. 언리얼 엔진의 모션 매칭(Motion Matching) 은 쿼리 기반 애니메이션 포즈 선택 시스템입니다. ...기존 애니메이션 시스템과 달리 모션 매칭은 애니메이션 데이터 세트에서 정보에 기반한 애니메이션 포즈를 선택하여 애니메이션 시퀀스 간에 트랜지션 또는 블렌딩 로직을 구성하지 않고도 반응형 애니메이션 시스템을 생성할 수 있습니다. (언리얼 엔진 공식 문서에서 발췌)https://dev.epicgames.com/documentation/ko-kr/unreal-engine/motion-matching-in-unreal-engine 이걸 쓸거긴한데.. 실제로 애니메이션 데이터베이스를 직접 만드려면 다량의 애니메이션 데이터가 필요한데, 자연스..

[UE5] 시네마틱 보스배틀 게임 개발일지 (4) - 보스 공격 구현(GAS)

이번엔 적의 공격을 구현해보았다. 원래는 그냥 애니메이션 몽타주 여러개를 준비해놓고 재생만 하게 하려고 했는데, GAS에 대해 조사해보니 유용할 것 같다는 생각이 들었다. 처음엔 대형 RPG 게임도 아니고, 단순히 보스전 하나만 있는 게임에서 GAS를 사용하는것은 오버엔지니어링이 아닐까 하는 생각이 들었지만, 본 프로젝트의 GAS 사용의 이점은 다음과 같았다. UGameplayAbility_Montage 클래스를 통한 애니메이션 몽타주 관련 작업의 용이성해당 클래스는 UGameplayAbility의 자식 클래스로, 멤버 변수인 AnimMontage를 적절히 등록해주고 ActivateAbility 함수만 호출해주면, 알아서 몽타주를 재생시켜준다.본 프로젝트에서 모든 액션은 애니메이션 몽타주를 기반으로 동작..

[UE5] 시네마틱 보스배틀 게임 개발일지 (3) - 보스 움직임 구현(BT + EQS)

이번엔 보스의 움직임을 구현해보았다.보스의 움직임은 기본적으로 다크소울 시리즈와 같이공격 사정거리로 접근해서 1회 공격플레이어를 맴돌기일정 시간 후 다시 1회 공격 이런 흐름으로 가도록 할 것이다. 우선 애니메이션의 경우에는 에셋에 포함되어있는 애니메이션 블루프린트를 그대로 사용하였으나, BlendSpace가 어색하게 작동하고 있어 이 부분만 직접 다시 만들어주었다.많이 해봤던 작업이기에, 어려울 부분은 없었다. 그리고 적을 움직여줄 AI를 구현하기 위해 Behavior Tree를 사용하였다.지금까지 만든 BT의 전체 모양은 다음과 같다.흐름을 간단히 요약하면, Target(플레이어)으로의 거리를 계속해서 측정하며, 그 결과에 따라 Attack 시퀀스 / Chase 시퀀스 둘 중 하나를 실행하게 된다. ..

[UE5] 시네마틱 보스배틀 게임 개발일지 (2) - 레벨, 보스 에셋 준비

먼저 밑바탕이 될 레벨, 그리고 보스를 준비해보았다. 둘다 에픽게임즈의 고품질 에셋을 활용해보기로 했다. 그리고 이 맵과 어울릴 만한 보스 에셋을 찾아보았는데, 이게 건조하고 묵직한 느낌이 들어 찾아본 무료 에셋 중에서는 제일 잘 어울릴 것 같았다. 대충 배치하고 간단한 AI를 만들어 돌려본 결과, 적은 작업만으로 어느정도 비주얼이 나와주어 만족스러웠다. 다만 오늘 작업 중 예상치 못한 이슈가 있었는데, 보스의 ABP 에셋에서 사용되는 Get Current Acceleration 노드가 기본적으로 플레이어 인풋을 기반으로 계산을 수행하는 탓에,AI 내비게이션을 통해 움직이는 상황에서는 제대로 계산이 안되는 문제였다. 이를 해결하기 위해 열심히 조사해본 결과, MovementComponent의 U..

[UE5] 시네마틱 보스배틀 게임 개발일지 (1) - 시작

작년 9월부터 얼마 전까지 연합 게임개발 동아리에서의 활동에 집중해왔는데,이제 어느 정도 마무리가 되어서 또 새로운 프로젝트에 도전해보려고 한다. 이번에 만들어 볼 게임은 거대 보스전을 주제로 한 게임이다. '파이널 판타지 16', '갓 오브 워'와 같이 거대한 스케일과 연출이 들어간 보스전을 구현해보려고 한다. 레퍼런스:https://youtu.be/3SAuuHCOkyI?si=-ZuC4cryHCrU3Cm8https://youtu.be/oYfSM5uhi4w?si=U9ip34qOPKYWFMbH 혼자서 수 개월 동안 진행하는 프로젝트에서 당연히 이 정도의 퀄리티를 내는 건 불가능할테지만, 대강 아래 항목들은 꼭 구현해보고자 한다.전투 중 맵 대규모 파괴Chaos Destruction을 사용하되, 성능을 위..