본문 바로가기

언리얼엔진

41. Camera의 Zoom In / Out 구현하기

FireBall 스킬이 사망 후에도 피격되는 문제 수정하기

Can Be Damaged 해제

BP_Character에서 AnyDamage 이벤트에 왔을 때, State가 Died로 바뀌는 순간에 Set Can Be Damaged를 통해서

해제해줌으로 해결이 가능하다.

 

* Can Be Damaged를 사용하면 Generate Overlap Events는 안써도 되지 않을까?

- 상관은 없지만, BeginOverlapEvent가 계속해서 불리는 문제가 발생할 수 있어서 같이 꺼주는 것이 좋다.


Zoom In / Out 구현하기

BP_FireBall 스킬 활성화 상태에서 우클릭 입력 시 Zoom In / Out이 되도록 구현할 것이다.

이전에 입력에 액션매핑 - WeaponB로 마우스 우클릭 입력을 추가했었다.


BP_Character 이벤트그래프

Begin / EndActionB 이벤트를 추가하여 각각 IsSkillActivated를 통해 스킬 활성화 중인지를 검사해주었다.

만약 스킬이 활성화 중이라면 현재 SkillNow에 들어있는 스킬의 Begin / End ActionB 함수를 호출해준다.


BP_FireBall의 이벤트그래프

BP_FireBall에서 Begin / End Action B 이벤트를 추가하였다.

만약 여기서 Zoom 기능을 구현하기 위해 카메라를 받아온다고 해도, SpringArm까지는 통제할 수 없을 것이다.

 

따라서 BP_CharacterInterface 인터페이스에서 Zoom In / Out 함수를 만들어주고, 실질적으로 SpringArm을 가지고 있는

BP_Player에서 Zoom 기능을 구현해주는 것이 맞다.

 

* BP_Character에서 BeginActionB → BP_FireBall의 BeginActionB → BP_Player의 Zoom 순서로 이동됨


Zoom의 작동 방식

1. Camera 이동

2. SpringArm의 길이 변경

3. FOV(Field Of View) 시야각 감소

 

BP_Player에서 Camera의 기본 FOV값은 90º로 잡혀있다(수평시야각)

여기서 해당 FOV의 값이 줄어들면 자동으로 화면 확대효과를 가져온다.

 

 


Add Timeline(타임라인 추가)

우클릭 - Timeline 검색으로 타임라인을 추가할 수 있다.

이 타임라인을 사용하여 고정값으로 FOV를 바꿀 때 느끼던 뚝뚝 끊기던 느낌을

부드럽게 확대 축소해줄 수 있다.


Timeline 내부

Timeline 내부에 각각 Float 트랙, Vector 트랙, Color 트랙이 있다.

여기서 사용할 것은 FOV(FieldOfView)값과 SpringArm의 TargetArmLength값을 만들 Float 트랙 2개와

SpringArm의 SocketOffset값을 만들 Vector 트랙 하나를 추가했다.

 

TargetArmLength(Float) 트랙에 각각 핀을 추가 - 시간 : 0.0, 0.25 / 값 : 300.0, 150.0 두개의 핀을 추가해줌

 

SocketOffset(Vector) 트랙에서는 x축을 뺀 y, z 축만 수정해주 것이다.

ㄴ y축 키 추가 - 시간 : 0.0, 0.25 / 값 : 0.0, 75.0 두 개의 핀 추가

ㄴ z축 키 추가 - 시간 : 0.0, 0.25 / 값 : 100.0, 75.0 두 개의 핀 추가

 

FildOfView(Float) 트랙에도 각각 핀을 추가 - 시간 : 0.0, 0.25 / 값 : 90.0, 80.0으로 추가해줌.


BP_Player 이벤트그래프

이후 Timeline을 보면 우리가 추가한 트랙들의 핀이 생성된 것을 볼 수 있다.

Zoom In 이벤트는 Play / Zoom Out 이벤트는 Reverse에 연결해주면서 Update로 실행핀이 나가게 된다.

 

그리고 각각 FieldOfView는 Camera의 Set Field of View로, Target Arm Length는 SpringArm의 Set Target Arm Length로,

Socket Offset은 SpringArm의 Set Socket Offset으로 핀을 이어주면 실행했을 때 자연스럽게 카메라가 Zoom In / Out되는 것을 볼 수 있다.