언리얼 엔진5 Basic - 아이템 시스템

타입·2024년 4월 5일
0

언리얼 강의

목록 보기
15/47

아이템 시스템

트리거 박스의 설정

  • 트리거 박스의 구현
    루트에 트리거(UBoxComponent)를 설정하고 자식에 메시 컴포넌트(UStaticMeshComponent)를 부착
    이펙트는 기본 값으로 비활성화 상태로 두고 오버랩 이벤트 발생 시 발동되도록 설정
    이펙트 종료 시 액터가 제거되도록 설정
  • 프로젝트에서 사용할 아이템 애셋
    총 3가지 종료의 아이템 타입
    • 무기: 캐릭터에 무기를 부착 (무기에 의한 부가 스탯 강화)
    • 포션: 캐릭터의 HP를 회복
    • 스크롤: 캐릭터의 기본 스탯을 상승

의존성 분리를 위한 설계 규칙

  • 프로젝트의 주요 레이어
    • 게임 레이어: 게임 로직을 구체적으로 구현하는데 사용
      (캐릭터, 게임 모드..)
    • 미들웨어 레이어: 게임에 사용되는 미들웨어 모듈
      (UI, 아이템, 애니메이션, AI..)
    • 데이터 레이어: 게임을 구성하는 기본 데이터
      (스탯 정보, 캐릭터 레벨 데이터..)

      위에서 아래로는 직접 참조하되, 아래에서 위로는 인터페이스를 통해 접근하도록 설정

소프트 레퍼런싱

  • 소프트 레퍼런싱과 하드 레퍼런싱
    • 하드 레퍼런싱
      액터 로딩 시 TObjectPtr로 선언한 언리얼 오브젝트도 따라서 메모리에 로딩됨
      게임 진행에 필수적인 언리얼 오브젝트는 이렇게 선언해도 되지만,
      아이템의 경우 데이터 라이브러리에 수 많은 아이템 목록이 있을 때 이를 모두 다 로딩하면 메모리에 큰 부담을 줄 수 있음
    • 소프트 레퍼런싱
      필요한 데이터만 로딩하도록 TSoftObjectPtr로 선언하고 대신 애셋 주소 문자열을 지정
      필요시에 애셋을 로딩하도록 구현을 변경할 수 있으나 애셋 로딩 시간이 소요됨
  • 현재 게임에서 로딩되어 있는 스켈레탈 메시의 목록 살펴보기
    무기 습득 후 SK_Blade_DragonSword 스켈레탈 메시가 로딩되는 걸 확인할 수 있음
// 무기 습득 전

Cmd: Obj List Class=SkeletalMesh
Obj List: Class=SkeletalMesh
Objects:
                                                                                                                                      Object      NumKB      MaxKB   ResExcKB  ResExcDedSysKB  ResExcDedVidKB     ResExcUnkKB
                               SkeletalMesh /Game/InfinityBladeWarriors/Character/CompleteCharacters/SK_CharM_FrostGiant.SK_CharM_FrostGiant     667.47     667.84     173.41           15.73            0.00          157.68
                                 SkeletalMesh /Game/InfinityBladeWarriors/Character/CompleteCharacters/SK_CharM_Cardboard.SK_CharM_Cardboard     506.46     506.83     133.16           15.73            0.00          117.42
                                                                                                Class    Count      NumKB      MaxKB   ResExcKB  ResExcDedSysKB  ResExcDedVidKB     ResExcUnkKB
                                                                                         SkeletalMesh        2    1173.93    1174.66     306.57           31.47            0.00          275.10
2 Objects (Total: 1.146M / Max: 1.147M / Res: 0.299M | ResDedSys: 0.031M / ResDedVid: 0.000M / ResUnknown: 0.269M)


// 무기 습득 후

Cmd: Obj List Class=SkeletalMesh
Obj List: Class=SkeletalMesh
Objects:
                                                                                                                                      Object      NumKB      MaxKB   ResExcKB  ResExcDedSysKB  ResExcDedVidKB     ResExcUnkKB
                               SkeletalMesh /Game/InfinityBladeWarriors/Character/CompleteCharacters/SK_CharM_FrostGiant.SK_CharM_FrostGiant     667.47     667.84     173.41           15.73            0.00          157.68
                                 SkeletalMesh /Game/InfinityBladeWarriors/Character/CompleteCharacters/SK_CharM_Cardboard.SK_CharM_Cardboard     506.46     506.83     133.16           15.73            0.00          117.42
                    SkeletalMesh /Game/InfinityBladeWeapons/Weapons/Blade/Swords/Blade_DragonSword/SK_Blade_DragonSword.SK_Blade_DragonSword      67.02      67.34      14.68            0.39            0.00           14.29
                                                                                                Class    Count      NumKB      MaxKB   ResExcKB  ResExcDedSysKB  ResExcDedVidKB     ResExcUnkKB
                                                                                         SkeletalMesh        3    1240.95    1242.00     321.24           31.86            0.00          289.38
3 Objects (Total: 1.212M / Max: 1.213M / Res: 0.314M | ResDedSys: 0.031M / ResDedVid: 0.000M / ResUnknown: 0.283M)

실습코드

https://github.com/dnjfs/ArenaBattle/commit/26a7f76e5842bcf0df01e004b875ce45aba433cd

  • 데이터 에셋 상속받아 구조 만들기
    UPrimaryDataAsset 클래스를 상속받아 멤버를 구현하면 원하는 데이터 구조를 만들 수 있음
    데이터 에셋 생성 시 해당 클래스를 선택하면 같은 데이터 구조의 에셋을 여러 인스턴스로 생성할 수 있음

  • Box 컴포넌트 오버랩 이벤트
    OnComponentBeginOverlap에서 Box 오버랩 이벤트 발생
    AddDynamic으로 델리게이트 등록하고 Box 오버랩 이벤트 발생하면 등록한 함수가 실행됨
    (물론 델리게이트 시그니처에 맞게 함수 인자를 세팅해야함)

  • 델리게이트 래퍼(Delegate Wrapper)로 타입에 따른 델리게이트 실행
    델리게이트를 배열로 관리하기 위함
    캐릭터가 아이템 상자 획득 시 타입에 따른 델리게이트를 실행하기 위해 델리게이트 래퍼라는 구조체를 선언
    해당 구조체는 단순히 델리게이트만 멤버로 가지는 구조체지만,
    캐릭터 구현 시 각 타입에 맞는 함수를 등록해주어 실행하는 곳에선 타입을 인덱스로 원하는 타입의 델리게이트를 실행하여 함수 호출

profile
주니어 언리얼 프로그래머

0개의 댓글