본문 바로가기
[ CODING STUDY ]/》유니티 실습

유니티 - [CameraShake, 카메라 쉐이크효과]

by MRG 2022. 6. 9.
728x90
반응형

▣ 안녕하세요. 이번장에서는 카메라 셰이크(흔들기) 효과에 대해 공부하도록 하겠습니다.

 

▣ 우선 3D프로젝트를 생성해 주시고, 기본 플레이어와 땅을 배치해 주세요.
그리고 카메라 위치를 플레이어 캡슐이 중앙에 보이게 위치를 변경해주세요.
그런 다음 플레이어에 스크립트 한 개를 생성해서 넣어주세요.

 

 

▣ 스크립트를 열어서 cam, cameraOriginalPos 변수를 선언해주세요.
cam에는 메인카메라메인 카메라 클래스를 cameraOriginalPos에는 메인 카메라에 위치를 넣어주세요.

▣ 그런다음 업데이트 함수에서 Debug.Log(Random.insideUnitSphere)이라는 클래스에 있는 기능을 출력해보려고 합니다. 

 

https://docs.unity3d.com/kr/530/ScriptReference/Random-insideUnitSphere.html

 

Unity - 스크립팅 API: Random.insideUnitSphere

Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. 닫기

docs.unity3d.com

▣ 이 기능은 유니티 매뉴얼에서 확인하면 반경 1을 갖는 구 안의 임의의 지점을 반환하는 함수라고 나와있습니다.
다시 말해 -1 ~ 0 ~ 1사이에 랜덤에 숫자를 Vector3 구의 형식으로 랜덤으로 반환해 주는 함수라고 생각하시면 됩니다.
저장을 하고

 

 

 

▣ 콘솔창에서 확인을 하면 이렇게 구의 반경으로 랜덤으로 벡터 값을 출력하는 걸 확인할 수 있습니다.
이제 이걸 이용해서 카메라를 랜덤으로 움직이게 하면 됩니다.

 

 

▣ IEnumator CameraShake()라는 코루틴을 생성해주세요. 
IEnumator CameraShake() 매개변수안에는 deuration == 유지시간, magnitude == 흔들리는 카메라 범위 크기를 의미합니다. 우리가 원하는 시간 그리고 원하는 범위까지 카메라를 흔들기 위함입니다. 


▣ float timer 변수는 시작 시간이고 
while()안에서 우리가 지정해 준 매개변수 유지시간까지 반복을 하기 위해 코드를 작성했습니다. 
그리고 cam.transform.localPosition = Random.insideUnitSphere * magnitude + cameraOriginalPos;
반경 1을 갖는 구의 랜덤 벡터 값 * 흔들리는 카메라 범위 + 카메라 원래 위치 
을 이렇게 진행하게 되면 우리가 원하는 범위만큼 카메라를 흔들게 됩니다. 

▣ cam.transform.localPosition = cameraOriginalPos 는 카메라가 흔들리고 다시 카메라를 원위치 
원래 상태로 두기 위함입니다. 

 

▣ 마지막으로 업데이트에서 마우스를 클릭하면 StartCoroutine()을 호출합니다. 
매개변수값은 원하는 값으로 지정해 주세요.

 

▣ 저장을 하고 실행을 하면 마우스를 클릭했을 때 카메라가 흔들리는 걸 확인할 수 있습니다.

 

728x90
반응형

댓글