Post

TPS 개발 : 웨폰 컴포넌트 잡다한 개선 + 소프트 포인터 TIL

인벤 캐싱 최적화, 탄 레이아웃 swap, 피격 정보 델리게이트, 소프트 포인터/레퍼런스/클래스 개념 정리

TPS 개발 : 웨폰 컴포넌트 잡다한 개선 + 소프트 포인터 TIL

TPS 개발 - 웨폰 컴포넌트 잡다한 개선

증강 시스템 삼부작을 끝내고, 오늘은 그동안 밀린 자잘한 개선들을 처리했다.


인벤토리 캐싱 처리

인벤토리 아이템 개수를 매번 순회해서 계산하던 걸 캐싱으로 바꿨다.

대상처리
변경된 배열(array)변경분만 갱신
변경된 개별 아이템해당 아이템만 갱신
모든 아이템 개수병합해서 캐싱 처리

전체 개수를 물어볼 때마다 순회하지 않고, 변경이 일어난 시점에만 캐시를 갱신하도록 했다.


WeaponComponent — 탄 레이아웃

스페셜 탄 리스트에 이어서, 탄 배열 순서를 다루는 기능을 추가했다.

  • 탄 레이아웃 인덱스 Get
  • 탄 레이아웃 변경(Swap)

UI에서 탄 순서를 드래그해서 바꾸는 것 같은 조작을 위한 기반 함수들이다.


타쿠 피격 정보 델리게이트 → GA_Fire

타쿠(적)가 맞았을 때의 정보를 델리게이트로 묶어서 GA_Fire에 전달하도록 정리했다.

1
2
3
4
피격 정보 델리게이트
  ├─ 데미지
  ├─ WeakPoint 여부
  └─ 전달한 GE

히트 판정에서 얻은 결과를 그냥 흩뿌리지 않고, 데미지·약점 여부·적용된 GE를 한 묶음으로 만들어 GA_Fire가 필요한 시점에 받아 쓰게 했다. 증강 시스템의 이벤트 트리거도 결국 이 정보를 근거로 발동하는 것이라, 여기서 정보가 깔끔하게 정리돼야 뒷단이 편해진다.


TIL — 소프트 포인터 / 소프트 레퍼런스 / 소프트 클래스

언리얼의 소프트 참조 계열 개념을 다시 짚었다.

타입예시특징
Soft Pointer / Soft Object PtrTSoftObjectPtr<UTexture2D>에셋 경로만 들고 있고, 실제 로드는 명시적으로(LoadSynchronous, 비동기 로드 등) 해야 함
Soft Reference에셋 경로(FSoftObjectPath)참조만 하고 강제로 메모리에 들고 있지 않음
Soft ClassTSoftClassPtr<AActor>클래스 자체를 소프트하게 참조, 필요할 때 로드

Hard Reference(UPROPERTY()로 직접 포인터를 들고 있는 것)와 달리, 소프트 계열은 참조하는 순간 바로 메모리에 로드되지 않는다. 그래서 무기·업그레이드·증강처럼 종류가 많고 한꺼번에 다 메모리에 있을 필요 없는 데이터를 다룰 때, 필요한 시점에만 로드하도록 설계할 수 있다.


오늘 정리

  • 인벤토리 아이템 개수는 변경 시점에만 캐시 갱신하도록 최적화
  • WeaponComponent에 탄 레이아웃 인덱스 조회/스왑 추가
  • 피격 정보(데미지/WeakPoint/GE)를 델리게이트로 묶어 GA_Fire에 전달
  • 소프트 포인터/레퍼런스/클래스 = 참조는 하되 로드는 필요할 때만 하는 계열
This post is licensed under CC BY 4.0 by the author.