2026/06 20

[언리얼 GAS 이해하기] #7 GAS 전체 구조 한눈에 보기

지금까지 GAS의 핵심 요소들을 하나씩 살펴보았다.#1 ASC (Ability System Component)#2 AttributeSet#3 Attribute와 float의 차이#4 GameplayEffect#5 GameplayTag#6 GameplayAbility이번 글에서는 지금까지 배운 내용을 하나의 그림으로 연결해 보자.GAS는 다섯 가지 핵심 요소로 이루어진다 ASC (Ability System Component) │ ┌─────────────┼─────────────┐ │ │ │ GameplayAbility GameplayEffect GameplayT..

TIL 2026.06.30

[언리얼 GAS 이해하기] #6 GameplayAbility는 네 요소를 어떻게 사용할까?

지금까지 GAS의 핵심 요소들을 하나씩 살펴봤다.ASC : 중앙 관리자AttributeSet : 능력치 저장GameplayEffect : 능력치 변경GameplayTag : 상태 관리그렇다면 마지막으로 궁금한 점이 생긴다."GameplayAbility는 이 모든 요소를 어떻게 사용하는 걸까?"이번 글에서는 GAS의 전체 동작 흐름을 GameplayAbility를 중심으로 정리해보자.GameplayAbility란?GameplayAbility는 캐릭터가 수행할 수 있는 행동(Action) 을 정의하는 클래스이다.예를 들어공격달리기점프회복 아이템 사용스킬 사용이 모두 GameplayAbility로 구현할 수 있다.Ability는 직접 능력치를 변경하지 않는다.대신 필요한 GameplayEffect를 적용하거나..

TIL 2026.06.29

트러블슈팅 - 레벨 전환/Restart 중 크래시 해결

트러블슈팅: 레벨 전환 및 Restart 중 크래시 발생문제 상황게임 플레이 중 레벨 전환이나 게임 오버 후 Restart를 누를 때 크래시가 발생했다.버그 발생 영상: 원인 분석처음에는 레벨 전환 과정에서 발생하는 문제라고 판단했다.그래서 다음 부분들을 확인했다.HUD Timer가 레벨 전환 후에도 실행되는지OpenLevel 호출 순서Widget 제거 여부GameState와 PlayerController 생명주기Timer 해제 여부하지만 크래시는 계속 발생했고, Crash Log의 Call Stack을 확인한 결과 실제 원인은 AMineItem::Explode() 내부에 있었다.```textUnhandled Exception: EXCEPTION_ACCESS_VIOLATIONAMineItem::Explo..

TIL 2026.06.27

[언리얼 GAS 이해하기] #5 GameplayTag는 왜 필요할까?

GameplayTag란?GameplayTag는 GAS에서 캐릭터의 상태나 속성을 이름으로 관리하는 시스템이다.쉽게 말하면,"현재 어떤 상태인지 알려주는 이름표(Label)" 라고 생각하면 된다.예를 들어 플레이어가달리는 중이라면 → State.Sprinting기절했다면 → State.Stunned사망했다면 → State.Dead같은 GameplayTag가 추가된다.bool 변수로도 가능하지 않을까?처음에는 대부분 이렇게 구현한다.bool bIsSprinting;bool bIsStunned;bool bIsDead;bool bIsInvisible;bool bCanAttack;bool bCanMove;처음에는 문제가 없어 보인다.하지만 게임 규모가 커질수록 bool 변수는 계속 늘어난다.PlayerbIsDea..

TIL 2026.06.26

[언리얼 GAS 이해하기] #4 GameplayEffect는 어떻게 능력치를 바꿀까?

GameplayEffect란?GameplayEffect(GE)는 GAS에서 능력치(Attribute)를 변경하는 역할을 하는 객체이다.쉽게 말하면,"Attribute를 어떻게 바꿀지 정의해 놓은 규칙" 이라고 생각하면 된다.예를 들어데미지를 받는다.체력을 회복한다.이동속도가 빨라진다.독에 걸려 지속적으로 피해를 입는다.이 모든 것이 GameplayEffect로 구현된다.왜 GameplayEffect가 필요할까?예를 들어 플레이어의 체력을 20 감소시키고 싶다고 해보자.일반적인 방식이라면Health -= 20.f;처럼 직접 값을 수정하면 된다.하지만 GAS에서는 이렇게 하지 않는다.대신 GameplayEffect를 생성해서 Attribute를 변경한다.Damage Effect ↓ASC ..

TIL 2026.06.25

[언리얼 GAS 이해하기] #3 Attribute와 float 변수의 차이

Attribute는 그냥 float 아닌가?GAS를 처음 공부하면 이런 생각이 든다. float Health = 100.f;float Stamina = 50.f; 체력과 스태미나를 저장하는데 문제가 없어 보인다.그런데 GAS에서는 보통 이렇게 사용하지 않는다. FGameplayAttributeData Health;FGameplayAttributeData Stamina; 왜 굳이 더 복잡한 구조를 사용할까?먼저 float의 특징float는 단순히 숫자 하나를 저장하는 변수다. float Health = 100.f;Health -= 20.f; 실행 결과Health = 80 끝이다.float는누가 값을 바꿨는지왜 바뀌었는지버프 때문인지디버프 때문인지전혀 알 수 없다.그냥 숫자만 저장한다.GAS는 숫자 이상의 ..

TIL 2026.06.24

[언리얼 GAS 이해하기] #2 AttributeSet은 왜 따로 존재할까?

AttributeSet이란?AttributeSet은 GAS에서 캐릭터의 능력치(Attribute)를 저장하는 클래스이다.예를 들어 RPG 캐릭터라면HPMPStaminaMoveSpeedAttackPower같은 값들이 AttributeSet 안에 저장된다.Player └─ ASC └─ AttributeSet ├─ HP ├─ Stamina ├─ MoveSpeed └─ AttackPower 그런데 왜 ASC 안에 바로 넣지 않을까?처음 보면 이런 생각이 든다. ASC{ float HP; float Stamina; float MoveSpeed;} 이렇게 하면 되는데 왜 굳이 별도 클래스를 만들었을까?답은능력치 관리만 ..

TIL 2026.06.23

[언리얼 GAS 이해하기] #1 ASC(Ability System Component)란?

ASC란?ASC(Ability System Component)는 GAS(Gameplay Ability System)의 중앙 관리자이다.한 줄로 표현하면,"Ability, Effect, Attribute, Tag를 관리하는 GAS의 컨트롤 타워"라고 할 수 있다.왜 ASC가 필요할까?게임 캐릭터는 다양한 기능을 가지고 있다.예를 들어 달리기 기능만 생각해 보자.입력↓PlayerCharacter↓StatComponent↓이동속도 증가↓스태미나 감소하나의 기능을 처리하기 위해 여러 클래스와 컴포넌트가 관여하게 된다.기능이 많아질수록 관리도 복잡해진다.GAS는 이러한 상태 관리와 능력 관리를 하나의 시스템으로 통합했고,그 중심에 ASC가 존재한다.ASC를 비유하면?마트 게임으로 비유하면 ASC는 점장이다.직원들..

TIL 2026.06.22

[C++] - 가장 가까운 같은 글자

핵심 아이디어문자를 왼쪽부터 순회하면서 각 문자가 마지막으로 등장한 위치를 저장한다.현재 위치 i에서 같은 문자가 이전에 나왔으면 현재 위치 - 마지막 위치 를 저장하고,처음 나온 문자라면 -1 을 저장한다.사용한 개념unordered_map unordered_map lastIndex; Key : 문자Value : 마지막으로 등장한 위치빠른 검색 가능 (평균 O(1))예시 lastIndex['a'] = 3; 의 의미 'a'가 마지막으로 나온 위치는 3 map vs unordered_mapmapunordered_map자동 정렬정렬 안 함O(log N)평균 O(1)트리 구조해시 테이블정렬이 필요 없고 빠른 검색만 필요하므로 unordered_map 사용.소문자만 나온다면 vector last(26, -1);..

TIL 2026.06.18

2026 06-16 NDC DAY-1참관 후기

NDC 2026에 다녀왔다. 여러 세션을 들었지만 가장 인상 깊었던 주제는 AI로 변화하는 게임 개발과 주니어 프로그래머가 팀에서 인정받는 방법이었다.기술은 빠르게 발전하고 있고 구현 자체의 난이도는 점점 낮아지고 있다. 하지만 강연들을 들으며 오히려 더 중요해진 것이 있다는 생각이 들었다.구현이 쉬워진 시대, 무엇으로 승부할 것인가키노트의 핵심 메시지는 단순했다.구현보다 맥락이 중요하다.AI의 발전으로 누구나 빠르게 결과물을 만들 수 있는 시대가 되었다. 하지만 게임이 경쟁력을 가지려면 결국 쉽게 복제할 수 없는 것이 필요하다.오랜 시간 쌓아온 IP플레이어가 경험하는 이야기개발사와 유저의 연대유저와 유저의 연대플레이어가 머물고 싶어지는 세계결국 게임의 가치는 기능보다도 경험과 세계관에서 나온다는 이야기..

게임공부 2026.06.17