개요
파라곤 에셋에 미니언의 근접공격을 구현하기 위해 칼만 따로 콜리전을 활성하고 싶었지만 칼과 몸이 하나의 스켈레탈 매쉬로 있어서 불가능했다.
따라서 칼만 따로 분리할 수 있는 방법이 없나 찾다가 언리얼 엔진상에서 간단하게 할 수 있는 방법이 있어 정리해보았다.
1. 스태틱 매쉬화
일단 후술할 방법을 사용하기 위해서는 스케레탈매쉬에서 스태틱 매쉬를 추출해야한다.
따라서 스켈레탈 매쉬창에 있는 Make Static Mesh를 클릭해준다.
저장할 위치를 선택해주면
스태틱 매쉬가 생성된것을 볼 수 있다.
2.모델링 모드
이제 해당 스태틱 매쉬를 뷰포트상에 배치하고 모델링 모드를 선택해준다.
그럼 모델링을 하기 위한 툴들이 왼쪽에 생긴다.
3. 자르기
우리는 현재 매쉬에서 칼만 남기고 모두 없애야 하기 때문에 Model > Plane Cut을 선택해준다.
그럼 다음과 같이 plane을 기준으로 매쉬가 잘려져 보인다.
보이기에만 잘려보이지 아직 잘리진 않은 상태이다.
현재 보이는 데로 자르고 싶다면 모델링 툴 패널에 Action > Cut을 클릭하면 된다,
여러번 자를 수 있으므로 plane을 이리저리 돌리면 계속 잘라가면 된다.
모두 잘랐다면 Accept 버튼을 눌러 수정한 매쉬를 저장해주자.
4. LOD 설정 수정
Accept를 하면 Selection 모드로 돌아가도 매쉬가 잘린채로 유지되는 것을 볼 수 있다.
하지만 해당 매쉬에서 좀 멀어지면 처음 상태로 되돌아가는 것을 볼 수 있다.
이유를 찾아보니 언리얼에서 매쉬 렌더링을 최적화 하기 위해 LOD를 적용해서 그랬다.
LOD는 거리가 멀수록 퀄리티가 낮은 매쉬로 바꿔줘서 잘 안보이는 매쉬에 대한 처리량을 줄일 수 있게 해준다.
따라서 우리가 자른 매쉬는 하나인데 거리에 따라 다른 매쉬가 렌더링 되서 나타나는 현상이였다.
해결하기 위해서는 스태틱 매쉬창에 Number of LOD를 1로 바꿔주면 된다.
바꿔주고 꼭 Apply Change를 눌러주자
이제 멀리서도 칼만 보이게 된 것을 볼 수 있다.
피봇 옮기기
현재 매쉬 자르기만 했는데 칼을 소켓에 자연스럽게 붙이기 위해서는 피봇의 위치도 칼 손잡이로 바꿔줘야한다.
피봇 위치도 모델링 모드를 통해서 바꿀 수 있다.
XForm > Edit Pivot을 누르고
나타난 기즈모를 칼 손잡이로 옮긴 후 Accept!
무기 장착
스켈레탈 매쉬를 자르는 방법은 찾지 못해서 따로 만든 칼 매쉬를 투명하게 만들고 콜리전만 사용할 것이다.
칼을 붙이기위한 코드는 간단하게 Character에 구현하였다.
헤더에 UPROPERTY로 UStaticMeshComponent* Weapon을 선언 후
생성자에 해당 코드를 추가하면 끝.
Weapon = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Weapon"));
Weapon->AttachToComponent(GetMesh(), FAttachmentTransformRules::KeepRelativeTransform, TEXT("FX_Trail_02_R"));
Weapon->SetCollisionProfileName(TEXT("NoCollision"));
블루프린트 클래스로 만든 후 우리가 만든 매쉬를 연결해준 뒤 뷰포트 상에서 칼이 붙어있는 것을 확인할 수 있다.
'Unreal' 카테고리의 다른 글
[Unreal C++] 객체 Class 타입 비교하기 (1) | 2025.01.07 |
---|---|
[Unreal C++]Unreal 코딩 표준 (0) | 2025.01.06 |
[Unreal] Animation 몽타주 (0) | 2025.01.01 |
[Unreal C++] AnimInstance (2) | 2024.12.31 |
[Unreal C++] behavior Tree C++로 가져오기 (0) | 2024.12.30 |