유니티 카메라 흔들기 스크립트
작성자 정보
- 마스터 작성
- 작성일
컨텐츠 정보
- 325 조회
- 목록
본문
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);
변수를 만들어 값을 조절하기도 가능
관련자료
-
이전
-
다음