초보 코린이의 성장 일지

UE4 Bow 카메라 각도, 에임 오프셋, 줌 기능 본문

언리얼

UE4 Bow 카메라 각도, 에임 오프셋, 줌 기능

코오린이 2023. 2. 1. 14:52

활동작에 오류들이 몇개 존재한다 우선 위아래 각도에 따른 애니메이션 변화와 활이 위를 보고 쏴도 정면으로 나가는 것

그리고 활을 당기고 나서 다른 무기로 바꿀때 화살이 손에 남아있는것 이런 사소한 오류부터 잡고 기능들을 구현해볼 것이다.

 

우선 손에 남아있는 화살부터 제거해 볼 것이다

remove item 이라는 함수를 사용하면 간편하게 제거가 가능하지만 기초적인 반복문으로 찾아서 지워주는 방법으로 해볼 것이다.

사용하게될 함수 및 변수를 우선적으로 생성해줬다.

Unequip 시퀀스 0번

1. 우선 전에 End_Equip에서 Set Collision Enabled를 No Collision으로 만들어줬다.

2. 그래서 Unequip에서는 다시 Query로 돌려줘야한다.

3. 그리고 Attach에서도 Socket을 Holster_Bow 자리로 다시 돌려줘야한다.

Unequip 아래부분 시퀀스 3번

1. Arrows를 가져다가 역순으로 Reverse를 사용해서 for문을 돌려준다.

2. 로컬변수 Index를 가지고 인덱스를 넣어준다.

3. Is Valid에서는 팬딩킬(지워지고 있는 상태를 뜻) 상태도 체크해준다. 가비지 컬렉터가 돌다가 팬딩킬 객체와 만나면 지워진다. 또 한 그 텀도 체크해준다. 

4. Element가 어떤게 붙어있는지 Get Attach로 찾아서 다시 Is Valid로 확인해준다.

5. 이제 화살 Arrows를 index를 찾아서 DestroyActor로 지워준다.

6. 또 Arrows에서도 동일하게 배열을 비워줘야 끝이난다.

이제는 화살이 손에 존재하는 오류는 해결이 됐다.

 

이제 쏘는 방향을 고처줘야한다.

 

Skill_Arrow로 가서 쏘는 이벤트에서 더 추가해줘야 한다.

화살 객체가 Yaw방향을 설정한 값으로 나가지만 Pitch도 돌려줘야한다.

 

1. Rotation에 그냥 In Direction를 연결해주면 된다. 왜냐 나갈 방향을 나타내는게 Direction이기 때문이다.

2. 하지만 위로보고 쏴도 정면으로 나가기 때문에 시야각을 조정해줘야한다.

 

플레이어로 가서 시야각을 위해 BP와 Character Movement에 있는 Yaw를 다시 체크해준다.

 

Set ViewPitch 접혀있는 부분 내부

1. 우선 Moving Component안에 Control Rotation이 들어있다 이걸 우선 콜해준다.

2. 플레이어에 Controller를 가져와서 플레이께 맞는지 확인해준다.

3. PlayerController안에 Camera Manager이 들어있다. 콜해준다.

4. Camera안에 View Pitch를 설정할 수 있는데 Min과 Max 를 가져와서 Y축 각도를 자연스럽게 고정시켜준다.

그럼 이제 마우스로 위아래로 시야를 움직여도 고정된 각도를 넘지 않아 자연스럽게 카메라가 바닥을 뚫고 캐릭터를 보거나 하는 경우가 사라지고 동작 또한 자연스럽게 된다.

 

 

이제 동작이있는데 이게 어려운 부분이다. 

섞어줘야하는데 블랜딩 스페이스로 섞는게 아닌 에임 오프셋으로 섞어야한다.

블랜딩 스페이스는 동작이 값에 의해 바꼈지만 에임 오프셋은 이전에 들어오는 값에서 변경된다.

블랜딩 스페이스는 뛰는 동작을 한다고 가정하면 값을 받아서 시작부터 뛰는 동작이 나오지만 에임 오프셋은 가만히 있는 동작에서 그때 값에 의해 변경된다.

 

이 5가지 애니메이션을 알맞게 섞을 것이다.

C = 전방 활 쏘는 동작

D = 아래 45도 쯤

D_90 = 아래 90도

U = 위로 45도 쯤

U_90 = 위로 90도

 

에임 오프셋 = 모든 각도

에임 오프셋 1D = 위, 아래 좌우만 사용가능것

1D로 생성해준다.

 

설정에 가로 축을 우리는 Y축으로 사용할 것이다. 각도는 -90 ~ 90으로 설정

Preview Base Pose는 기준 동작이 된다 무조건 들어가야하는 필수 조건이며. 그래야 나중에 동작 변화해서 커스텀마이징이 가능해진다.

아래에 각도가 나오는데 중앙은 쏘는 동작 왼편으로 갈수록 아래방향 애니메이션 오른쪽은 위를 보는 애니메이션을 세팅해준다.

 

다시 캐릭터 애니메이션으로 돌아온다

애니메이션 레이어 2개 추가 및 사용할 변수들 추가

이벤트그래프로 돌아와서 전에 작성했던 윗부분은 제외하고 시퀀스 1번 부분만 추가해준 상태이다

 

1. Character를 가져다가 조준점을 만들어주는 Get Base Aim Rotation 함수를 불러준다. 조준각을 나타낸다

2. Pitch값만 사용하도록 핀 분활 후 세팅값만 넣어준다.

 

BowLayer

1. 원래 애니메이션에는 Direction과 Speed만 사용했으나 Aim 오프셋을 만들었기 때문에 사용할 것이므로 연결해준다.

2. 그럼 이제 위아래 동작이 자연스럽게 제한이 걸려서 동작을 이룬다.

3. 근데 아직 몽타주가 동작이랑은 안섞여 있는 상태이므로 아직까지 위를 보고 쏴도 정면으로 활을 발사한다

4. 이제 몽타주를 섞어줘야한다. 이게 너무 중요하다

5. 몽타주가 안나온다는 의미는 위에 있는 Aim 오프셋이 먼저 나오고 몽타주가 그다음 동작하기 때문이다

6. 그래서 우선은 슬롯을 하나 더 추가해준다.

 

1. 스켈레톤으로 가서 오른쪽 애님 슬롯을 추가해주고 이름은 "BowBody"로 설정해준다.

2. 보시는것처럼 내가 지정하는 몸체를 커스텀마이징 한다고 생각하면 된다.

BowLayer

1. 이제 몽타주를 플레이시키고 에임 오프셋을 플레이 시키게 만들어 볼 것이다.

2. 원래하던 애니메이션 추가하듯이 캐시포즈를 사용해서 내가 만들어 놓은 슬롯에 연결해주고 블렌딩으로 넘긴다.

3. 그 다음 에임 오프셋으로 연결하고 최종으로 넘기면 잘 섞이게 된다.

4. 그리고 또 설정해 줘야 하는게 있다.

 

1. 우리가 동작을 위해 움직여야 하는 부분이 위에 보이는 허리 부분이다.

2. 그래서 블렌딩 설정에 보면 Layer Setup 부분이 있다 이곳에 추가를 해서 내가 원하는 부위 이름으로 지정해줘야한다.

이러면 이제 몽타주까지 섞여서 플레이된다.

 

쏘는 동작인 애니메이션으로 가서 슬롯을 우리가 만들어준 BowBody로 설정해주면 끝이난다.

 

 

이제 오른쪽 마우스를 눌렀을때 줌을 켜서 쏘도록 조준 동작을 만들어 볼 것이다.

방법으로는 SpringArm, Camera 을 땡겨서 줌처럼 보이게 만들게 될 것이다.

우선 오른쪽 마우스로 키 등록부터 해준다.

 

Weapon으로 가서 함수 Pressed, Released와 변수를 생성해준다.

 

이제 생성한 동작을 위해 Weapon_Component로 와서 넣어준다.

 

1. Pressed가 동작할 조건은 Weapon을 검증된 Get으로 변환시켜서 if로 Unarmed 상태인지 확인해준다.

2. 그게 False라면 동작하도록 만들어준다.

3. Released로 동일하게 만들어준다.

 

이제 플레이어로 돌아와서 설정한 입력 이벤트 액션을 할 수 있도록 설정해준다.

눌렀을떄 Pressed, 땟을때 Released

 

 

아까 Unequip만 해줬기 때문에 End_Equip도 설정을 해줘야한다.

End_Equip

1. 조준하게되는 Aim을 Spawn해주고 클래스 만들어준걸로 설정 그다음 Owner을 선택해준다.

2. 변수유형 Skill Aim으로 만든 변수에 세팅해준다.

 

다시 Weapon_Bow로 와서 CreateArrow, Pressed, Released 함수안에 세팅해준다

CreateArrow

 

Pressed

Aim 검증된 Get로 변형 후 유효한지 확인 그 다음 Pressed 콜해준다.

Released

Aim 검증된 Get로 변형 후 유효한지 확인 그 다음 Released 콜해준다.

 

구조체를 하나 생성해준다.

담을 정보가 많다.

구조체를 사용하는 용도는 원래있던 값을 기본값으로 지정해놓고 그 값으로 수정해서 사용할 것이다.

 

TargetArmLength = 타겟과에 거리를 나타내기 위해 값을 설정하기 용

SocketOffset = 카메라와 충돌체 사이에 어떤 객체가 걸리면 파고들수 있다.

TargetOffset = 시작을 나타내는 지점. 상대간격을 사용하는게 아닌 월드공간을 사용한다

EnableCameraLag = 캐릭터가 움직일때 카메라가 조금 늦게 따라오는 기능, 원래 적용 중이던 기능 꺼줘야한다.

CameraLocation = 카메라 위치가 필요하기 때문에 필요할수도 있어서 선언해놓는다.

 

자손 블루프린트로 Skill_Aim을 생성해준다.

Bow안에서 해도 되지만 스킬로 상속 받는 이유로는 관리하기 편하게 만들기 위해서이다.

이벤트, 변수 추가해준다.

1. Character에 있는 Spring Arm, Camera를 콜해준다.

2. 플레이어 자신 빼고는 가지고 있지 않기 때문에 인식 시켜줘야한다

 

Pressed 앞 부분
Pressed 뒷 부분

1. Spring, Camera을 검증된 Get으로 둘다 유효한지 확인해준다 없으면 안되기 때문에

2. Aiming 중에 그게 아닌 False라면 True로 다시 만들어 주고 조건을 이어간다

3. 컴포넌트들을 만든 구조체 값을 담은 변수 Origin에 넣어서 저장해준다.

4. 변수 AimData를 이용하여 구조체 값을 기본값으로 세팅하기 위해 Set으로 다 넣어준다.

5. AimData에 Camera Location(카메라 위치)를 SetRelativeLocation으로 연결해준다.

6. 그리고 줌을하게되면 시야각을 줄여야 하므로 Field Of View를 사용하여 45로 줄여준다.

 

Released 앞 부분

 

Released 뒷 부분

1. Released는 위에있는 Pressed를 뒤집어 주면된다.

2. 수정한건 Set Aiming을 False로 돌려주고

3. 설정값들은 날려준다.

4. 그다음 다시 시야각을 90도로 돌려준다.

 

이제 줌기능도 생겼다. 하지만 부드럽게 움직이질 않으므로 다른 설정으로 고처줘야한다.

 

https://www.youtube.com/watch?v=wYSvW4OFe8k 

 

- 에임 오프셋 기능을 알게됐다.

- 활은 어렵다

Comments