전체 글 99

TIL260731 - Unreal Networking 기초

1. 핵심 개념언리얼의 멀티플레이는 기본적으로 서버 권위(Client-Server) 구조를 사용한다.Listen Server와 Dedicated Server의 차이는 권위 모델이 아니라 서버 프로세스에 로컬 플레이어가 존재하는가이다.NetMode는 현재 월드 인스턴스의 네트워크 실행 형태를 나타낸다.NetDriver는 월드의 네트워크 통신을 총괄하고, NetConnection은 서버와 특정 클라이언트 사이의 연결 하나를 나타낸다.Actor의 Ownership은 RPC의 목적지, 조건부 프로퍼티 복제, Relevancy를 결정한다.LocalRole은 현재 머신에서 이 Actor를 어떻게 다룰 수 있는지, RemoteRole은 반대편 머신에서 어떤 역할로 다뤄지는지를 나타낸다.클라이언트는 Server RPC..

TIL260716 - SceneTextureId

1. 핵심 개념SceneTextureId언리얼에서 카메라 화면 효과에 대해서 비가 내리는 효과를 구현하기 위해 포스트 프로세싱을 구현하는 중 SceneTexture(PostProcessInput0)과 같은 노드를 사용한 적이 있다.서칭해본 결과 언리얼의 렌더링 아키텍처는 디퍼드 렌더링(지연 렌더링, deferred rendering)을 사용하며 GBuffer라는 곳에 렌더링 과정 중에 텍스처를 저장해서 기하 렌더링과 광원 렌더링을 분리해서 한다고 한다. 앞서 말한 노드인 SceneTexture의 PostProcessInput0은 이러한 지연 렌더링 과정에서 나온 텍스처의 일부이다.SceneTextureId를 찾아본 결과 아래와 같은 Enum으로 정의되어 있었다.enum ESceneTextureId { ..

TIL260713 - CommonUI 컨테이너에 push pop을 매우 빠르게 연타하면 위젯이 안사라짐

# 문제 다이얼 메뉴로 무기를 스왑하는 UI를 개발하는데 연속으로 계속해서 누르면 ui가 유령처럼 계속남아있는 문제가 있다.타이머로 락걸기에는 반응성이 중요한 UI여서 다른 근본적 해결 방법이 필요하다. 위젯 디버거에서 보니 SCommonANimatedSwitcher의 구현에서 애니메이션 재생을 기다리고 위젯을 푸시 & 팝하는 것 같다. 이 옵션을 꺼보자. 해당옵션을 끄니 문제가 말끔하게 사라졌다. 애니메이션 duration이 남아있는 구간 동안 UI를 닫거나 열려하니 계속 잔존해 있는 것으로 판별됐다. 왼쪽에 정보용 사이드 UI는 Event On Activated로 등장 애니메이션이 존재해서 여전히 해당 이슈가 있다. void ANKMPlayerController::OnToggleInformati..

TIL260709 - 버그 리포트

버그 리포트 프로젝트 마감이 다가워서 바빠서 1주 넘게 TIL을 작성하지 못했다. 그래서 일단 개인적으로 발견한 버그를 기록했다. 1. MVVM 플러그인에서 블루프린트로 Conversion function 만들기 언리얼 엔진은 전역적으로 접근해야 하는 뷰모델을 위해 MVVM View Model Collection Subsystem을 기본 제공합니다.VM 없는데 있다고 뜨는 에러원래 ViewModel을 두고 아무것도 바인딩하지 않으면 VM을 찾지 못하나요?ShopVM = Cast(View->GetViewModel(FName("ShopViewModel")).GetObject());Common Lazy Image나 기본 Image 위젯이 가진 텍스처 할당 함수들(예: Set Brush from Texture,..

TIL260701 - Ch3 - 9 - UI 구조

1. 핵심 개념프로젝트에서 UI를 설계할 때 기존의 쓰던 MCP 구조를 버리고 MVVP 패턴을 쓰고 싶어서 언리얼의 MVVM 플러그인 설치한 뒤에 라이라 UI의 구조를 현재 진행 중인 프로젝트 사양에 맞춰서 조정하고 CommonUI와 함께 쓰려고 한다.2. 상세 내용 라이라 프로젝트의 UI는 전체적으로 계층을 가지고 조립하는 식으로 느슨하게 모듈형으로 설계되어 있다. 비동기 로드를 위해서 UNKMUIExtentionData(Primary Data Asset을 정의하고 아래의 타이밍에서 로드 가능 1. 프로젝트 세팅에서 할당하여 게임 시작 전 비동기 로드 가능 2. 1에 생성된 위젯은 NKMUIPolicy로 최초 월드 생성 시 등장 3. InjectUIExtensionsDynamic로 할당하여 레벨 간 ..

TIL260625 - Ch3 - 7 - Ghost Effect

1. 핵심 개념https://youtu.be/mEonsCQrsG8Ghost Effect(잔상 효과) 구현2. 상세 내용구현 방법 언리얼의 UPoseableMeshComponent를 이용해서 런타임에서 전용 메테리얼을 가진 플레이어 모델을 생성하고 포즈를 플레이어 맞춰서 CopyPoseFromSkeletalComponent를 사용해 동기화 해주었다.이렇게 생성한 잔상은 duration을 주어서 material의 alpha 값을 조정해서 점차 사라지게 한 뒤 월드에서 제거했다. 메테리얼은 빛에 상관없이 항상 발광하도록 Unlit으로 설정한 뒤 Color에 fresnel을 주어서 아웃라인이 빛나도록 효과를 주었고 Color와 Opacity를 parameter로 분리했다.이후 블루프린트로 잔상효과가 구현된 것을..

TIL260624 - Ch3 - 6 - 스폰 기획

1. 스폰 기획기획 중인 게임이 원형 돔에 8개의 게이트가 있고 이 게이트 중에서 랜덤으로 몬스터 그룹이 나오는 스폰 시스템을 가졌다.이런 스폰 시스템을 설계하기 위해 다음과 같은 점을 고려했다.csv 테이블로 작성한 값을 파싱해서 DataAsset으로 사용할 수 있도록 한다.구글 스프레트 시트를 HTTP로 가져올 수 있도록 연결몬스터는 각 8개의 게이트에서 되도록 고루 나온다.아마존 클라우드에서 사용한 랜덤 알고리즘을 적용한다. 랜덤으로 2개의 게이트를 골라서 사용 빈도가 적은 게이트를 선택한다.각 몬스터는 스폰 타이밍이 랜덤이지만 어느정도 집중된 빈도를 가져야한다.각 몬스터는 정규분포를 가진다. 약한 몬스터는 평균이 앞에 있고 분산이 크다. 그리고 강한 몬스터는 평균이 뒤에 있고, 분산이 적다.각 웨..

TIL260623 - Ch3 - 5 - GameMessageSubsystem

1. 핵심 개념GameMessageSubsytem 사용 문서 만들기NetKarma/Plugins/GameplayMessageRouter/GameMessageRuntime/public/GameFramework/GameMessageSubsystem.h2. 상세 내용2.1. GameMessageSubsytem라이라 프로젝트의 Plugins 중 GameplayMessageRouter->GameplayMessageRuntime에 위치함GameMessageSubsytem은 송신자와 수신자가 서로를 몰라도 GameplayTag(채널), USTRUCT(데이터 타입)만 일치하면 통신이 가능하도록 하는 이벤트 버스 시스템이다.GameMessageSubsystem은 싱글턴으로 구현되었으므로 가져올 때는 UGameplayMe..