언리얼의 어마어마한 기능 중 하나인 애니메이션 리타깃

그런데 디테일한 부분이 안 맞는 경우가 있을 수 있다

 

내 경우엔 권총을 양손으로 쥐는 모션이 문제였는데

손이 서로 교차해서 어색한 모습을 보이는 것이었다

 

애니메이션 리타깃의 리타기터에서 [ 리타기터 자동 생성 ]을 해제하고

리타깃 에셋을 직접 설정하는 것으로 해결했는데

이 리타깃 에셋을 만드는 게 참 아리송하단 말이지

 

위 문제를 해결하는 과정에서 이것저것 테스트 하다 보니

손은 해결했는데 머리가 이상하게 회전한 상태가 되는 다른 문제가 발생

 

끝내 알아낸 방법은 아래와 같다

1. 마네킹 IK 릭 복제
2. 복제한 IK 릭에 현재 캐릭터 메쉬 설정
3. IK 자동 생성 클릭

4. IK 리타기터 생성 (얘는 복제 안 하고 새로 만들어도 무관)
5. IK 리타기터에서 팔 맞추기
6. 리타깃 체인 자동 생성 클릭
7. 솔버 스택에서 기존 풀 바디 IK 제거

 

반드시 이 순서대로 해야만 된다

(사실 6번은 안 해도 되긴 하는데 IK 본 세팅이 중복된 게 찜찜해서 해봤더니 깔끔하게 정리까지 된 셈)

 

진짜 힘들었다....

'개발 > Unreal' 카테고리의 다른 글

회전 각도 추가  (0) 2026.04.29
낙하 데미지 주기  (0) 2026.04.28
액터 위치 변경하기  (0) 2026.04.27
지렛대 만들기  (0) 2026.04.27
자연스럽게 떨어지고 고정되는 액터  (0) 2026.04.24

점유 가능한 프랍 인터랙션 관련 내용

 

언리얼 기본 회전은 최하 각도가 5˚

1˚씩 회전시키고 싶은데 그럴 수가 없다

 

하지만 이건 옵션을 추가하면 되는 것

[ 편집 > 에디터 개인 설정 > 레벨 에디터의 뷰포트 > 일반 로트 그리드 크기 ]에

항목을 추가하고 값을 1로 설정하면 끝!

 

이제 1˚가 추가되어 사용할 수 있게 되었다

'개발 > Unreal' 카테고리의 다른 글

애니메이션 리타깃  (0) 2026.06.01
낙하 데미지 주기  (0) 2026.04.28
액터 위치 변경하기  (0) 2026.04.27
지렛대 만들기  (0) 2026.04.27
자연스럽게 떨어지고 고정되는 액터  (0) 2026.04.24

지렛대 활용을 위해 물체를 들어올렸다 떨어뜨리는 기능을 구현하면서

이 물체를 하나의 공격 스킬로 활용하게 하면 좋겠다고 생각했다

 

그래서 물체의 무게와 높이(속도)에 따라 가중된 데미지를 입히는 기능을 구현했다

높이가 높아질수록 자유 낙하 시간이 길어지고 이에 따라 가속도가 붙으니

계산 주체는 물체의 무게와 속도가 되겠다

 

물체의 충돌 범위를 설정하기 위해 Collision을 배치한다

- 항상 곧게 떨어져 물체의 바닥과 충돌한다면 바닥 부분에 배치하면 된다

- 어딘가에 걸리거나 지형에 의해 언제나 바닥면과 충돌할 수 없다면 메쉬 전체를 덮는 형태로 배치하면 된다

 

물체가 충돌했는지, 충돌 대상은 누구인지 확인하기 위해 오버랩 이벤트 사용

단순히 닿기만 해도 데미지가 들어가면 안 되니 움직이고 있는 상태일 경우에만 데미지가 들어가도록 했다

 

CalcDamage가 바로 데미지 계산 공식을 담은 함수인데

그래프 구성은 아래와 같다

- 무게와 속도, 데미지 가중치를 토대로 계산한다

- 무게와 속도에 따라 가중치가 결정되며 이 가중치를 기본 데미지에 곱해 최종 데미지를 산출한다

- 속도가 없거나 낮은 상태에선 0의 데미지를 입힌다

- 마이너스 데미지 방지 혹은 데미지 제한을 한다면 Clamp를 활용하면 된다

'개발 > Unreal' 카테고리의 다른 글

애니메이션 리타깃  (0) 2026.06.01
회전 각도 추가  (0) 2026.04.29
액터 위치 변경하기  (0) 2026.04.27
지렛대 만들기  (0) 2026.04.27
자연스럽게 떨어지고 고정되는 액터  (0) 2026.04.24

앞서 만든 지렛대를 활용하기 위해 물체를 들어올렸다 떨어뜨리는 기능을 구현한다

아주 매우 간단하다

 

기능은 아래 순서대로 실행된다

1. 물체 소환

2. 물체 들어올리기

3. 물체 떨어뜨리기

 

위 기능들은 하나의 Input Action에서 다룬다

- Started에서 물체를 소환한다

 > 첫 입력 시, 물체를 생성한다

 > GetSpawnTransform은 가독성을 위해 별도로 만든 함수로 구성은 아래와 같다

 

- Triggered에서 물체를 들어올린다

 > 누르고 있는 동안 생성한 물체를 계속 위로 올린다

 > MoveStorage는 가독성을 위해 별도로 만든 함수로 구성은 아래와 같다

 

- Completed에서 물체를 떨어뜨린다

 > 입력 해제 시, 피직스를 적용해 자유 낙하시킨다

 > Landing 함수는 「 자연스럽게 떨어지고 고정되는 액터 」에서 다뤘던

    올바른 착지 여부 확인 후 결과에 따른 처리 기능과 연결되어 있다

 > 떨어지고 난 뒤에 위 기능이 실행돼야 하지만 의도대로 작동하지 않기에 위와 같이 함수로 처리했다

'개발 > Unreal' 카테고리의 다른 글

회전 각도 추가  (0) 2026.04.29
낙하 데미지 주기  (0) 2026.04.28
지렛대 만들기  (0) 2026.04.27
자연스럽게 떨어지고 고정되는 액터  (0) 2026.04.24
컨텍스트 메뉴  (0) 2026.04.22

퍼즐 요소로 활용할만한 게 뭐가 있을까 생각하다

문뜩 지렛대가 떠올라 바로 만들어보기로 했다

 

지렛대의 한쪽 끝에 물체를 떨어뜨리면

반대쪽 끝에 있는 대상이 날아가는 기능을 수행한다

 

처음에는 무식하게 피직스 시뮬레이트만을 활용해서 해보려 했다

떨어지는 물체와 지렛대는 정상 작동하나 문제는 캐릭터

피직스를 캡슐 단위에서 키면 난리가 나고 메쉬 단위에서 키면 작동하지 않는다

 

해서 인위적이지만 런처 기능을 활용해 구현하고

최대한 자연스러운 모습이 되도록 세팅해본다

 

첫 번째, 외형 만들기

언리얼의 모델링 툴을 이용해 뚝딱하고 만들었다

콜리전은 자동 컨벡스 콜리전을 적용했다

 

두 번째, 지렛대 블루프린트 만들기

BP 구성은 아래와 같다

- 외형을 담당하는 메쉬 배치

- 날리기 위한 결과값 계산을 위해 각 위치값이 필요한데 이 기준을 구하기 위해 화살표 컴포넌트 배치

- 물체가 떨어지는 부분 및 떨어졌다는 신호를 받기 위한 콜리전 배치

- 캐릭터가 지렛대 위에 있는지 확인하기 위한 콜리전 배치

 

세 번째, 그래프 작성

지렛대에 떨어지는 물체의 무게와 높이(떨어지는 속도)

그리고 캐릭터의 위치에 따라 날아가는 거리와 속도를 다르게 적용하는 것이 목표

 

GetImpactPower는 떨어지는 물체의 무게와 높이(떨어지는 속도) 기반으로 힘을 계산한 값인데

이벤트 그래프에 넣자니 가독성이 떨어져서 함수로 만들었다

 

현재는 날릴 수 있는 대상은 캐릭터만이며 동시에 여러 캐릭터를 날릴 수 있지만

날아가는 도중 각 캐릭터들끼리 충돌해 궤도가 틀어지는 문제가 있다

 

이 부분은 날아가는 동안 각 캐릭터들의 충돌을 '무시'하도록 설정하면 되긴 하는데

당장 급한 건 아니라 패스

 

마지막, 테스트 진행

아주 잘~ 날아간다!

'개발 > Unreal' 카테고리의 다른 글

낙하 데미지 주기  (0) 2026.04.28
액터 위치 변경하기  (0) 2026.04.27
자연스럽게 떨어지고 고정되는 액터  (0) 2026.04.24
컨텍스트 메뉴  (0) 2026.04.22
플레이어 매핑 키  (0) 2026.04.19

액터를 소환했을 때, 그냥 앞에 소환되는 것보다

공중에 소환돼 자유 낙하되는 모습이 더 재밌어 보이지 않는가?

 

이렇게 구현하는 건 매우 간단한데 피직스를 적용하면 끝

하지만 낙하 후 바닥에 착지한 뒤에도 계속 움직인다면 여러 문제가 발생하기 마련

해서 낙하가 끝나면 피직스를 적용 해제하여 해당 자리에 고정되도록 한다

 

그런데 낙하가 끝났다는 건 어떻게 판단할 것인지?

올바르게 착지되지 않으면 어떻게 할 것인지?

 

아예 이런 상황을 배제하기 위해

피직스를 포기하고 Timeline으로 구현하자니

매우 안정적이지만 너무나도 부자연스러웠기에 패스

 

처음엔 Box Trace를 활용해 바닥에 닿았다는 판정이 나오면

바닥 착지 후 충돌에 조금 움직이는 시간을 고려해 딜레이 적용

딜레이 끝나면 피직스 적용 해제하는 방향으로 구현

하지만 만족스런 결과가 나오지 않는다

 

그래서 액터가 완전히 멈췄다는 것과 이후 액터의 각도를 파악해

올바르게 착지되었다는 것을 판단하게 했다

 

올바르게 착지했다면 액터 기능 실행 가능토록 상태 변경

그렇지 않다면 Despawn 시킨다

 

이를 정리한 그래프는 아래와 같다

'개발 > Unreal' 카테고리의 다른 글

액터 위치 변경하기  (0) 2026.04.27
지렛대 만들기  (0) 2026.04.27
컨텍스트 메뉴  (0) 2026.04.22
플레이어 매핑 키  (0) 2026.04.19
랙돌  (0) 2026.04.16

다양한 기능을 간편하게 실행할 수 있는 컨텍스트 메뉴

주로 아이템을 선택했을 때, 장착 / 장착 해제 / 사용 / 분해 등의 리스트를 나열하여

그 중 하나를 선택해 바로 기능을 실행할 수 있게 한다

 

이번 글에선 컨텍스트 메뉴 구현 방법을 정리한다

본 컨텍스트 메뉴는 보관함에서 사용하여 아이템과 밀접한 관계가 있다

해서 다양한 기능들이 복합적으로 연결되어 있는데 이를 모두 설명하기엔 분량이 많아지므로 모두 생략

대충 흐름만 파악할 수 있을 정도로 서술한다

 

첫 번째, 데이터 준비

용이한 관리를 위해 2종의 Enum을 준비한다

- E_ContextMenu : 컨텍스트 메뉴 타입으로 컨텍스트 아이템 구성을 위한 기준값

 

- E_ContextItem : 컨텍스트 아이템 종류 정의

 

현재 선택 중인 슬롯에 담긴 아이템 정보를 파악하기 위해 데이터 에셋을 준비한다

- 변수 타입은 ST_Item 구조체로 아이템 테이블용으로 직접 제작한 구조체

- 슬롯을 선택하여 컨텍스트 메뉴를 호출하는 시점에 해당 슬롯에 담긴 아이템 정보를 저장한다

- 컨텍스트 메뉴에선 이 정보를 토대로 어떤 형태로 구성할지 판단한다

- 데이터 에셋 관련 사항은 「 데이터 에셋 」 내용 참고

 

두 번째, UI 구성

두 개의 위젯 BP가 필요하다

- UI_ContextMenu

- UI_ContextItem

 

너무 간단하기에 글로만 나열하면 아래와 같다

- UI_ContextMenu

 └ 캔버스 패널

   └ 보더 : 컨텍스트 메뉴의 배경

     └ 세로 박스 : 컨텍스트 아이템을 담을 그릇

 

- UI_ContextItem

└ 캔버스 패널

  └ 크기 박스 : 컨텍스트 아이템 크기 설정

    └ 버튼 : 컨텍스트 아이템 조작

      └ 텍스트 : 컨텍스트 아이템의 기능 이름 표시

 

세 번째, 컨텍스트 아이템 변수 추가

1. 부모 파악용 변수 추가

UI_ContextItem에서 취소 버튼을 눌렀을 때, 컨텍스트 메뉴가 닫히도록 해야 하는데

본 컨텍스트 아이템이 종속된 컨텍스트 메뉴가 누군지를 알아야 하는 상태

 

해서 UI_ContextMenu 타입으로 변수 추가하고

컨텍스트 아이템이 만들어질 때, 이 변수에 부모 정보를 넣어준다

 

2. 타입 파악용 변수 추가

해당 컨텍스트 아이템이 어떤 타입인지 알 수 없는 상태

해서 컨텍스트 아이템이 만들어질 때, 변수에 타입을 넣어 해당 컨텍스트 아이템이 어떤 타입인지 알 수 있게 한다

 

네 번째, 컨텍스트 메뉴

1. 필요한 변수 추가

- ParentUI : 컨텍스트 메뉴의 부모 데이터 (본 글에선 사용할 일 없어 추가 안 해도 무관)

- SlotData : 슬롯에 담긴 아이템 데이터

- TargetSlot : 컨텍스트 아이템들을 담기 위한 배열

 

2. 컨텍스트 메뉴 구성 함수

무기 / 소모성 아이템 / 기타 아이템 등 아이템 타입에 따라 제공하는 기능이 다를 것

이에 따라 아이템 타입별 컨텍스트 아이템들로 배열을 구성한다

※ 이 부분도 테이블로 할 수 있으나 종류 수가 그리 많지 않아 그래프로 작성했다

 

3. 컨텍스트 아이템 생성 함수

컨텍스트 아이템 배열에 따라 컨텍스트 아이템을 생성하고 컨텍스트 메뉴에 추가한다

String 테이블로부터 읽어온 텍스트를 컨텍스트 아이템의 텍스트에 표시한다

컨텍스트 아이템의 부모 정보와 타입 정보를 저장한다

 

4. 컨텍스트 메뉴 최종 구성

컨텍스트 메뉴가 생성된 시점에 위에서 추가한 두 개의 함수를 활용해 컨텍스트 메뉴를 구성한다

 

다섯 번째, 컨텍스트 아이템

버튼을 클릭했을 때, 컨텍스트 아이템 타입에 따른 기능을 실행하도록 한다

 

여섯 번째, 컨텍스트 메뉴 호출

보관함 UI에서 슬롯 클릭 시, 컨텍스트 메뉴를 호출하게 한다

- 클릭 이벤트는 슬롯에서 받는다

 

- 클릭 이벤트를 받으면 보관함 UI에서 컨텍스트 메뉴 호출 함수를 실행한다

 

 > 컨텍스트 메뉴 호출 함수가 실행되면 기존에 호출된 컨텍스트 메뉴가 있는지 확인 후 제거한다

 > 컨텍스트 메뉴 제거 기능은 다양한 곳에서 사용되기에 아래와 같이 함수로 만들었다

 

일곱 번째, 컨텍스트 메뉴 제거

슬롯 외 다른 부분 클릭 시, 컨텍스트 메뉴 제거

 

마지막, 테스트 진행

- 빈 슬롯일 경우, 무시

- 아이템 있는 슬롯일 경우, 컨텍스트 메뉴 호출

- 컨텍스트 메뉴 버튼 클릭 시, 컨텍스트 메뉴 제거

- 다른 슬롯 클릭 시, 컨텍스트 메뉴 제거

- 슬롯 외 다른 공간 클릭 시, 컨텍스트 메뉴 제거

'개발 > Unreal' 카테고리의 다른 글

지렛대 만들기  (0) 2026.04.27
자연스럽게 떨어지고 고정되는 액터  (0) 2026.04.24
플레이어 매핑 키  (0) 2026.04.19
랙돌  (0) 2026.04.16
게임 메뉴  (0) 2026.04.16

+ Recent posts