유니티

유니티 카메라 흔들기 스크립트

작성자 정보

  • 마스터 작성
  • 작성일

컨텐츠 정보

본문

1.전체코드 

using UnityEngine;


public class cameraShake : MonoBehaviour

{

    public float ShakeAmount;


    public float ShakeTime;

    Vector3 initialPosition;


    public void VibrateForTime(float time)

    {

        ShakeTime = time;

    }


    public void endGame()

    {

        ShakeTime = 0;

    }


    // Start is called before the first frame update

    void Start()

    {

        initialPosition = new Vector3(0f, 0f, -5f);

    }


    // Update is called once per frame

    void Update()

    {

        if(ShakeTime > 0)

        {

            transform.position = Random.insideUnitSphere * ShakeAmount + initialPosition;

            ShakeTime -= Time.deltaTime;

        }

        else

        {

            ShakeTime = 0.0f;

            transform.position = initialPosition;

        }

    }

}

 

 

2.코드 설명

2-1 변수 선언

public float ShakeAmount; 

float ShakeTime;

Vector3 initialPosition;

 

public float ShakeAmount;  public을 사용해여 외부에서 흔드는 양을 조절하게함

float ShakeTime; 흔들리는 시간 변수

Vector3 initialPosition; 초기 좌표

 

2-2 흔들기 함수

public void VibrateForTime(float time)

{

    ShakeTime = time;

}

외부에서 참조하여 흔드는 시간을 매개변수로 받아 설정해준다.

 

2-3 멈추는 함수

public void endGame()

{

    ShakeTime = 0;

}

게임 오버시 흔드는 효과를 멈춘다.

시간에 0을 대입하여 바로 멈추게 한다.

 

2-4 스타트

void Start()

{

    initialPosition = new Vector3(0f, 0f, -5f);

}

 흔들릴 좌표 초기 셋팅

 

2-5 업데이트

void Update()

{

    if(ShakeTime > 0)

    {

        transform.position = Random.insideUnitSphere * ShakeAmount + initialPosition;

        ShakeTime -= Time.deltaTime;

    }

    else

    {

        ShakeTime = 0.0f;

        transform.position = initialPosition;

    }

}

조건문 (ShakeTime이 0보다 크면 )

Random.insideUnitSphere는 반경이 1인 구체의 임의의 좌표를 얻음 

랜덤한 좌표 * 움직임의 크기 + 초기좌표 = 움직이게되는 좌표

Update문이어서 매초 실행이 되며 랜덤한 좌표가 매초 바뀌기 때문에 ShakeTime이 0보다 작아질때 까지 움직인다.

ShakeTime이 0보다 작아지면 시간을 0으로 바꾸고, 좌표를 초기 좌표로 이동시킨다.

 

Random.insideUnitSphere = 반경이 1인 구체의 임의의 좌표값

반경 = 반지름

 

 

3. 할당하기

3-0 GameManager에 할당하기

3-1생성자로 선언하기

new cameraShake camera;


3-2 스타트에서 선언하기

 void Start()

 {

     camera = GameObject.FindWithTag("MainCamera").GetComponent<cameraShake>();

}


3-3 카메라 흔들기 

float VibrateForTime = 0.3f;

camera.VibrateForTime(VibrateForTime);

적당한 함수 하나 만들어서 특정한 이벤트에서 사용하기

변수를 만들어 값을 조절하기도 가능

관련자료

댓글 0
등록된 댓글이 없습니다.

최근글


새댓글


알림 0