기초반 강의

기초반 3강 / 컨트롤러, 총기 구현

jh009 2026. 6. 23. 12:47

폴더 정리

BP_PlayerCharacter → Characters/Player/로 이동


Characters 폴더 우클릭 → Update Redirector References

 

폴더를 나눠서 관리하는 이유:

나중에 몬스터도 추가될 예정이기에 미리 분리해놓으면 헷갈리는 일이 줄어듦


UPlayerInputConfigDataAsset C++ 클래스 만들기

 

New C++ Class → DataAsset 생성 → 이름설정 PlayerInputConfigDataAsset


PlayerInputConfigDataAsset.h 내용 추가

PlayerInputConfigDataAsset.h


DA_PlayerInputConfig 인스턴스 만들기

 

Content/Input → MiscellaneousData Asset → 이름 설정 DA_PlayerInputConfig


DA_PlayerInputConfig → Context, Actions 설정


PlayerCharacter.h

 

InputMappingContext, Move, Look, Jump 삭제

PlayerCharacter.h

 

PlayerInputConfig 추가

PlayerCharacter.h


PlayerCharacter.cpp 

 

#include "PlayerInputConfigDataAsset.h" 추가

PlayerCharacter.cpp

 

BeginPlay 수정

PlayerCharacter.cpp

 

SetupPlayerInputComponent 수정

PlayerCharacter.cpp


BP_PlayerCharacter 슬롯 갱신

Player Input Config → DA_PlayerInputConfig 할당 → PIE 테스트 진행


총기 시스템 기초 / 메시 컴포넌트 + 무기 데이터

 

FPS_Weapon_Bundle 다운

 

언리얼 에디터 → Fab으로 접속할 때 가끔 로그인이 풀리는 경우가 있음 → 그럴 경우 다운이 아예 안되는 경우가 있으니 주의


External 폴더 → Move Here → External 폴더 Update Redirector References

 

FPS_Weapon_Bundle 삭제

언리얼 에디터, 폴더 안에 있는 FPS_Weapon_Bundle 탐색기로 들어가서 수동으로 삭제하기

 

삭제 후 Content 폴더 확인


EquippedWeaponMesh 컴포넌트 추가

 

무기 메시를 들고 다닐 슬롯 1개를 캐릭터에 추가

 

PlayerCharacter.h

PlayerCharacter.h

 

PlayerCharacter.cpp

PlayerCharacter.cpp


BP_PlayerCharacter → EquippedWeaponMesh 생성되었는지 확인


UWeaponDataAsset C++ 클래스 만들기

 

New C++ Class → DataAsset 생성 → 이름설정 WeaponDataAsset


WeaponDataAsset.h

BlueprintType → enum 타입을 블루프린트 변수나 핀 타입으로 쓸 수 있게 노출하는 지정자

FTransform = Location + Rotation + Scale 을 한 묶음으로 담는 구조체

FTransform::Identity → 추가 보정 없음 (기본값)

  • Location (0,0,0)
  • Rotation (0,0,0)
  • Scale (1,1,1)


DA_Weapon_Sniper / Grenade / Machine 인스턴스 만들기

 

1. Content 파일에 Weapons 폴더 생성

2. Miscellaneous → Data Asset → 부모 WeaponDataAsset 3개 생성

 

이름 설정 DA_Weapon_Grenade / DA_Weapon_Machine / DA_Weapon_Sniper 

 

WeaponType, Mesh, Damage 설정

DA_Weapon_Grenade
DA_Weapon_Machine
DA_Weapon_Sniper


무기 전환 입력

IA 3개 추가 (Sniper / Grenade / Machine)

에셋 이름 Value Type
IA_Sniper Digital (bool)
IA_Grenade Digital (bool)
IA_Machine Digital (bool)

 


IMC 키 매핑

IMC_PlayerInputMapping

 

A_Sniper → 키 1

IA_Grenade → 키 2

IA_Machine → 키 3


PIC에 슬롯 추가 

 

PlayerInputConfigDataAsset.h


DA_PlayerInputConfig (IA_Sniper, IA_Grenade, IA_Machine 슬롯 채우기)


APlayerCharacter에 무기 전환 로직

 

PlayerCharacter.h

PlayerCharacter.h
PlayerCharacter.h

 

PlayerCharacter.cpp

PlayerCharacter.cpp
PlayerCharacter.cpp

 

BeginPlay 끝에 기본 무기 장착

PlayerCharacter.cpp

 

SetupPlayerInputComponent 바인딩 추가

PlayerCharacter.cpp


BP_PlayerCharacter에 DA 3개 할당

BP_PlayerCharacter Class Defaults → Weapon 카테고리에 에셋 할당


PIE 테스트 / 무기 전환

게임 플레이 시

1번 → Sniper (이미 들고 있음)

 

2번 → Grenade

 

3번 → Machine 

 

메시가 손에서 어색하지 않게 DA_Weapon_ → AttachTransform 조정

 


발사 / 저격 라인 트레이스

IA_Fire 추가 / Value Type : Digital bool

 

IMC_PlayerInputMapping → Left Mouse Button → IA_Fire 매핑


PIC에 FireAction 추가

 

PlayerInputConfigDataAsset.h


APlayerCharacter → FireGun

 

PlayerCharacter.h

PlayerCharacter.h

 

PlayerCharacter.cpp

PlayerCharacter.cpp
PlayerCharacter.cpp

 

SetupPlayerInputComponent 바인딩 추가

PlayerCharacter.cpp


최종 PIE 테스트

 

이동: WASD / 마우스 시점

점프: Space

무기 전환: 1 (저격) / 2 (유탄) / 3 (머신건)

발사: 마우스 좌클릭

 

좌클릭 시 1번 무기 저격일때만 빨간 라인 + 충돌점 노란 구가 생기는 것을 확인 가

 

Output Log 창 바닥에 HIT 되어서 50의 데미지가 들어간 것을 확인