무기 시스템 - 1

2026. 7. 12. 21:51·Unreal

UnrealEngine으로 신규 프로젝트를 진행중, 무기 시스템을 개발하고 있다.
무기 시스템은 보더랜드식 접두사, 접미사 모듈이 있으며 모듈에 따라 무기의 능력이 일부 바뀌어야 한다.

또한, 발사 방법, 투사체 종류, 발사시 효과, 명중시 효과 등등이 무기마다 다 다르기 때문에 최대한 설계를 잘 해야 한다는 어려움이 있었다.

 

1. 무기는 액터로, 무기 정보는 데이터 에셋, 인스턴스로

무기는 맵에 스폰 및 장착을 해야하니 액터를 상속해야 하지만, 인벤토리에 넣을 수 있어야 하기 때문에 무기 정보만을 위한 인스턴스 클래스가 필요하다. 

무기의 데이터 자체는 UPrimaryDataAsset을 상속해 데미지, 발사 속도 등의 데이터를 넣고 런타임 인스턴스 클래스에는 이 DataAsset과 런타임에서 붙는 여러 모듈등으로 계산 후 출력하도록 했다.

 

정적 데이터: UGSItemData / UGSWeaponData / UGSWeaponData_gun

런타임 인스턴스: UGSItemInstanceData/UGSWeaponInstanceData

액터: UGSWeapon/UGSWeapon_Gun/UGSWeaponMelee

2. 무기는 공격 방식이 다양하니 Strategy 패턴을 사용한다. 

무기는 대부분은 총이니 Projectile 을 사용하겠지만, 근접무기의 경우는 다르다. 따라서 Strategy 클래스를 만들고 (EditInineNew) 프로퍼티를 통해 클래스를 골라서 사용한다.

다만, 발사 전략은 무기 발사 시에, 어떻게 탄을 발사하는가 를 담당하고, 쏠 수 있는가, 언제 쏘는가, 어떻게 쏘는가는 Ability가 담당한다. (차지 무기의 경우, 발사 가능 여부 등등은 Strategy 클래스가 담당하기에는 좀 버거워서)

 

발사 전략: UGSFireStrategy / UGSFireStrategy_Projectile, UGSFireStrategy_Hitscan

3. GAS 연결

GAS의 SpecHandle들을 가지고 있는 구조체를 만들어 전달한다. 데미지, 사용자에게 적용할 핸들, 타겟에게 적용할 핸들 등을 가지고 있다.

또한 GameplayTag는 다음과 같이 사용한다.

 

UGSWeaponAffix::DamageTypeTags  //데미지 타입

UGSItemData::ItemTag //아이템 종류 (인벤토리)


투사체는 OnHit 함수에서 피격자 ASC에게 DamageSpec을 넘겨주는데

이 스펙에는 SetByCallserTagMagnitudes로 지정한 태그와 데미지 원본 수치, 
DynamicAssetTags로 추가한 데미지 타입을 건네준다.

만약 도트딜 등등이 필요하다면 SetByCaller에 태그와 value를 더 주면 될 것 같다.

 

플레이어가 GAS를 이용해서 상호작용 / 무기 발사 를 해야 하기때문에 GAS에 대한 공부를 더 해야한다.

 

 

'Unreal' 카테고리의 다른 글

Unreal Gameplay Ability System 기초  (0) 2026.07.13
'Unreal' 카테고리의 다른 글
  • Unreal Gameplay Ability System 기초
GRstory
GRstory
  • GRstory
    GRstory Blog
    GRstory
  • 전체
    오늘
    어제
    • 분류 전체보기 (39)
      • Unity (0)
      • Unreal (2)
      • DirectX (3)
      • 프로그래머스 (30)
      • GameReady Format (1)
      • AI (2)
      • ETC (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    GameReady
    omniverse
    OpenUSD
    SimReady
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
GRstory
무기 시스템 - 1
상단으로

티스토리툴바