카메라 흔들기(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 |