반응형

전체 글 141

[UE] 언리얼 네트워크 프로그래밍 - GameMode와 로그인

GameMode의 주요 함수PreLogin : 클라이언트의 접속 요청을 처리하는 함수 - 서버는 실행 XLogin : 접속을 허용한 클라이언트에 대응하는 플레이어 컨트롤러를 만드는 함수PostLogin : 플레이어 입장을 위해 플레이어에 필요한 기본 설정을 마무리하는 함수StartPlay : 게임의 시작을 지시하는 함수BeginPlay : 게임 모드의 StartPlay를 통해 게임이 시작될 때 모든 액터에서 호출하는 함수 클라이언트에는 GameMode가 없음(서버에만 있음)-> 클라이언트는 게임의 시작을 알기 위해 GameState를 서버로부터 Replicate받음-> GameMode의 명령을 받은 GameState는 모든 액터들이 BeginPlay를 호출하도록함-> GameMode의 게임 시작 명령을 ..

공부/UE 2026.02.08

[UE] Meta Attribute

Meta Attribute란?상태(state)가 아닌 AttributeHealth, Mana, Stamina → 상태IncomingDamage → 계산 입력값즉,“현재 데미지가 몇이다”가 아니라“이번 Effect에서 들어온 데미지 값”이건 지속 상태로 유지될 이유가 없는 값이다.➡️ GAS 설계상 이런 값은 Meta Attribute로 분류된다. 따라서 Meta Attribute는 보통 Replicate 대상이 아님 Meta Attribute는 왜 Replication을 안 하나?Meta Attribute의 성격IncomingDamageOutgoingDamageDamageHealingDone이런 것들은:계산 중간값한 프레임 / 한 Effect 단위PostGameplayEffectExecute에서 소비 후..

공부/UE 2026.01.14

[UE] PreAttributeChange가 아니라 PostGameplayEffectExecute에서 Clamp 해야 하는 이유

불에 들어가면 HP가 감소해야 하는데 감소하지 않는 것을 볼 수 있다.이유는 지금 HP에 대한 Clamp 처리를 PreAttributeChange에서 해주고 있기 때문이다 왜 PreAttributeChange에서 해주면 문제가 되는걸까찾아보니 PreAttributeChange는 BaseValue가 바뀐 직후, CurrentValue는 바뀌기 전에 호출된다고 하더라 못믿겠어서 엔진 코드를 직접 찾아봤다진짜로 PreAttributeChange 이전 콜스택에 FActiveGameplayEffectsContainer::SetAttributeBaseValue 함수 내부에서 BaseValue를 먼저 세팅한 후에 PreAttributeChange를 호출해주고 있었다. 그럼 왜 CurrentValue를 바꾸기 전에 C..

공부/UE 2025.11.02

[UE] GameplayEffect의 Stack 여부에 따른 Tag 중첩

Q) 왜 Stack이 쌓이는 GE는 Tag가 중첩되지 않지만, Stack이 쌓이지 않는 GE는 Tag가 중첩될까? A) Stack이 쌓이는 GE를 찾아서(FindStackableActiveGameplayEffect) 있으면 해당 GE에 스택만 변경, 없으면 FActiveGameplayEffect 새로 만들어서 태그 및 스택 변경 만약 FindExistingActiveGameplayEffect로 스택 가능한 GE가 없으면 새로운 FActiveGameplayEffect를 만든다 만약 스택 가능한 GE가 없으면 새로 만든 FActiveGameplayEffect를 인자로 넘기는 InternalOnActiveGameplayEffectAdded를 호출해준다. 내부에서 UpdateTagMap으로 GrantedTag..

공부/UE 2025.10.20

[UE5] PlayerState, PlayerController의 Replicate 시점

1. 서버에서는 PossessedBy 호출되면 Pawn에 Controller 및 Controller의 PlayerState 둘 다 세팅되어서 유효함 2. 클라에서도 PlayerState가 Replicate 되면 OnRep_PlayerState, Controller가 Replicate되면 OnRep_Controller 가 각각 호출된다. 문제는 이 두 함수의 순서가 보장이 안된다. 따라서 PlayerState, Controller가 확실하게 유효할 때 접근해서 사용하기 위해 각각의 함수에서 InitAbilityActorInfo(아니면 아래 출처의 블로그처럼 RefreshAbilityActorInfo)를 호출해주는 게 좋다 https://vorixo.github.io/devtricks/gas-replicat..

공부/UE 2025.10.14

[UE] GAS in Multiplayer Game

게임 모드는 서버에서만 있다. 클라에서 접근하면 nullptr를 반환서버에선 모든 클라의 Player Controller를 갖고 있고 각자 클라는 각자 Player Controller의 local version을 갖고 있다서버에선 모든 클라의 Player State를 갖고 있고 클라는 본인 것 포함 다른 클라의 Player State의 local version을 갖고 있다서버에서 모든 Pawn을 다 갖고있고 각자 클라도 마찬가지로 모든 Pawn의 local version을 갖고 있다각자 클라는 본인의 HUD와 Widget만들 갖고 있다서버에서 바뀐 변화를 클라에게 뿌려주는것을 Replication이라고 한다Replication은 서버->클라 한 방향으로만 가능하다

공부/UE 2025.10.03

[UE] Rotation

Orient Rotation to Movement“Pawn/Character를 이동 입력 방향으로 자동 회전시키는 기능”Controller 회전을 바꾸는게 아님Use Pawn Control Rotation Spring Arm, Camera 두 컴포넌트 모두에 Use Pawn Control Rotation 옵션이 있다.여기서 Control Rotation은 캐릭터가 바라보는(=카메라) 시야 Spring Arm의 Use Pawn Control Rotation- Spring Arm의 회전이 Pawn의 Control Rotation을 따라 갈 것 인지Camera의 Use Pawn Control Rotation- Camera의 회전 이 Pawn의 Control Rotation을 따라 갈 것 인지 Spring Ar..

공부/UE 2025.10.03

[UE] 입력을 매핑하는 과정

1. Input Action 만들기 2. Input Mapping Context 만들기아까 Input Action을 만든 이유는 Input Mapping Context에 Mapping해주기 위함이다 3. UEnhancedInputLocalPlayerSubsystem에 내가 만든 InputMappingContext 연결해주기UEnhancedInputLocalPlayerSubsystem는 언리얼에서 제공하는 Subsystem의 일종이다(https://welikecse.tistory.com/193) 4. InputComponent에 내가 원하는 동작에 대한 함수를 바인딩InputComponent는 Player Controller 클래스가 멤버로 갖고 있다InputComponent를 냅다 자식 클래스인 UEn..

공부/UE 2025.10.03
반응형