[Unreal5] 블루프린트 피격, UI
위젯 블루프린트 생성 및 기본 설정
- Content Browser에서 우클릭
- User Interface > Widget Blueprint 선택
- 생성된 위젯 블루프린트를 더블클릭해서 편집
Pick Parent Class 설명
UserWidget
- 가장 기본적인 UI 위젯 클래스
- 게임내 HUD, 메뉴, 인벤토리 등 일반적인 게임 UI 제작에 사용
- 대부분의 게임 UI는 이것을 사용
오디오 관련
- AudioFader: 오디오 볼륨을 조절하는 슬라이더 UI
- AudioKnobLarge: 큰 사이즈의 오디오 조절 다이얼
- AudioKnobSmall: 작은 사이즈의 오디오 조절 다이얼
- AudioTextBox: 오디오 관련 텍스트 입력 필드
사운드 믹싱 시스템이나 게임 내 음악/사운드 조절 UI 제작 시 사용
에디터/시퀀스 관련
- EditorUtilityWidget: 언리얼 에디터 내에서 사용되는 커스텀 툴 UI
- LevelSequenceBurnIn: 레벨 시퀀스의 오버레이 정보 표시
- NewWidgetBlueprint: 새로운 위젯 블루프린트의 기본 템플릿
- TakeRecorderOverlayWidget: 테이크 레코딩 시 사용되는 오버레이 UI
에디터 : 레벨 에디터 확장 기능이나 사용할 커스텀 툴 혹은 개발자 도구 인터페이스를 만들 때 사용
시퀀스 : 시네마틱 시퀀스에 정보를 오버레이 하거나 컷신이나 동영상에 자막을 추가할 때 사용
테이크레코드 : 게임 플레이 녹화 및 리플레이 시스템 UI 제작 시 사용
이펙트 관련
- SubmixEffectDelayPresetWidget: 오디오 서브믹스 딜레이 효과 설정 UI
사운드 이펙트 조절 UI, 오디오 후처리 설정 인터페이스 제작 시 사용
일반적인 게임 UI는 대부분 UserWidget을 사용하고, 나머지 클래스들은 특수한 목적이나 개발 도구를 만들 때 사용된다
주요 위젯 컴포넌트
Common (자주 사용하는 기본 위젯)
Text: 텍스트를 표시
TextBlock: 여러 줄의 텍스트 표시
Button: 클릭 가능한 버튼
Image: 이미지 표시
ProgressBar: 진행률이나 게이지 표시
Slider: 슬라이더 바
CheckBox: 체크박스
Panel (위젯을 담는 컨테이너)
Canvas Panel: 기본 컨테이너, 자유로운 배치 가능
Horizontal Box: 위젯들을 가로로 배열
Vertical Box: 위젯들을 세로로 배열
Grid Panel: 격자 형태로 배열
Overlay: 위젯들을 겹쳐서 표시
Scroll Box: 스크롤 가능한 컨테이너
Input (입력 관련)
ComboBox: 드롭다운 메뉴
EditableText: 사용자가 편집 가능한 텍스트
SpinBox: 숫자 증감 입력
TextBox: 텍스트 입력 상자
UI 배치 방법
1. 캔버스 패널
캔버스 패널 설치
2. 캔버스 패널 조절하는법
화살표 버튼을 눌러서 드래그 하면 사이즈에 맞게 조절할 수 있는 창이 나옴
3. UI 배치
배치할 UI를 드래그로 배치 하면 완료
LayOut 관련 속성
- Anchors: 해상도 변경시 위치 고정점
- Position: 위젯의 위치
- Size: 위젯의 크기
- Alignment: 정렬 방식
- Padding: 내부 여백
- Z-Order: 겹침 순서
기본 UI 위젯 표시
- Begin Play 또는 원하는 이벤트에서
- Create Widget (위젯 클래스 선택)
- Add to Viewport (화면에 표시)
- 필요시 Set Visibility로 표시/숨김 제어
위젯 블루프린트 내 이벤트 처리
- 버튼 클릭: On Clicked 이벤트
- 값 변경: 바인딩된 변수나 함수 사용
- Custom Events 생성 가능
1. 그래프로 이동
디자이너 : UI 레이아웃
그래프 : UI 블루프린트 노드 화면
2. 함수 생성 후 로직 작성
3. 로직 적용할 UI에 바인드
간단한 피격 방법
콜라이션을 만들어 해당 범위 안에 다른 오브젝트가 있으면 공격 가하기
1. 캐릭터 주변에 콜라이더 설치
TIP
콜라이더의 히든 인 게임을 비활성화 시키면 게임 중 범위 확인 가능
2. 피격 함수 생성
Get Overlapping Actor
지정된 영역 내에서 겹치는(충돌하는) 모든 액터들을 찾는 함수
파라미터와 사용법
Target
- 오버랩을 체크할 기준이 되는 컴포넌트나 액터
- 보통 Box Collision, Sphere Collision 등의 콜리전 컴포넌트 사용
Class Filter
- 특정 클래스의 액터만 감지하도록 필터링
Ex) Enermy로 설정시 Enermy 클래스 및 Enermy 클래스를 상속받는 것만 감지
- None으로 설정하면 모든 액터 감지
Output
- 감지된 모든 액터들의 배열 반환
- For Each Loop 등으로 처리 가능
Get Overlapping Actors에서 Class Filter로 지정했더라도 Cast를 해주는 이유
타입 안정성
- Get Overlapping Actors는 기본적으로 Actor 배열을 반환
- BP_Creature의 특정 변수나 함수에 접근하기 위해서는 Cast가 필요
- Cast를 통해 BP_Creature의 모든 기능을 안전하게 사용 가능
예시
Get Overlapping Actors (Class Filter: BP_Creature)
→ 반환값은 여전히 일반 Actor 타입
→ BP_Creature의 Health, Damage 등의 변수에 접근 불가
→ Cast를 통해 BP_Creature로 변환해야 접근 가능
결론: Class Filter는 "어떤 액터를 찾을지"를 결정하고, Cast는 "찾은 액터를 어떻게 사용할지"를 위해 필요하다
3. 콜라이션 하나로 전방향 대처하기
결과
데미지 처리하기
체력바 UI 만들기
1. ProgressBar 생성
2. 그래프로 들어가서 변수 설정
3. 프로그래스바의 퍼센트를 만든 변수로 바인딩
데미지 함수
데미지 체력바 계산할 때 주의할 점
HP를 Int 상태에서 그냥 처리하면 0과 1만 나온다
소수점이 있는 비율을 얻으려면 Float로 먼저 변환해서 계산해야한다
예시
정수 나누기: 75/100 = 0
Float 나누기: 75.0/100.0 = 0.75