카메라 흔들기(Camera Shake)

2019. 7. 27. 22:40유니티

소스 코드

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class CameraShake : MonoBehaviour
{
    public void Do(Camera camera)
    {
        if (!mIsShake)
        {
            mOriginPos = camera.transform.localPosition;
 
            mShakeDuration = m_ShakeDuration;
            mIsShake = true;
        }
    }
 
    private void Update()
    {
        if (mIsShake)
        {
            if (mShakeDuration > 0)
            {
                transform.localPosition = GetPositionByDirection();
 
                mShakeDuration -= Time.deltaTime;
            }
            else
            {
                transform.localPosition = mOriginPos;
 
                mShakeDuration = 0;
                mIsShake = false;
            }
        }
    }
 
    private Vector3 GetPositionByDirection()
    {
        Vector3 pos = Vector3.zero;
 
        switch (m_Direction)
        {
            case eDirection.LeftRight:
                pos = mOriginPos + (Random.insideUnitSphere * m_ShakeAmout);
                pos.y = 0;
                pos.z = mOriginPos.z;
                break;
 
            case eDirection.TopDown:
                pos = mOriginPos + (Random.insideUnitSphere * m_ShakeAmout);
                pos.x = 0;
                pos.z = mOriginPos.z;
                break;
 
            case eDirection.Random:
                pos = mOriginPos + (Random.insideUnitSphere * m_ShakeAmout);
                break;
        }
 
        return pos;
    }
 
    [SerializeField] private eDirection m_Direction = eDirection.LeftRight;
    [SerializeField] private float m_ShakeDuration = 1f;
    [SerializeField] private float m_ShakeAmout = 2f;
 
    private float mShakeDuration = 0;
 
    private Vector3 mOriginPos;
 
    private bool mIsShake = false;
 
    public enum eDirection { LeftRight, TopDown, Random }
}

Direction 옵션

LeftRight

Left와 Right로만 카메라를 흔드는 옵션입니다.

TopDown

Top과 Down으로만 카메라를 흔드는 옵션입니다.

Random

전 방향으로 카메라를 흔드는 옵션입니다.

변수

m_ShakeDuration

카메라를 흔드는 시간입니다.

m_ShakeAmout

카메라를 흔들 때 추가적인 값입니다.

mShakeDuration

전 방향으로 카메라를 흔드는 옵션입니다.

mOriginPos

카메라의 초기 위치며 흔드는 작업이 완료되면 카메라는 초기 위치로 설정해야합니다.

mIsShake

카메라가 흔드는 중인지 아닌지를 설정합니다.

 

 

'유니티' 카테고리의 다른 글

Immediate Mode GUI(IMGUI)  (0) 2019.08.20
Bounds 살펴보기  (0) 2019.08.17
싱글톤  (0) 2019.07.27