CapersProject/Assets/02.Scripts/Tycoon/TycoonGameOver.cs

94 lines
2.9 KiB
C#
Raw Normal View History

2024-10-10 09:33:50 +00:00
using System.Collections;
using UnityEngine;
public class TycoonGameOver : MonoBehaviour
{
// RectTransform을 통해 UI 오브젝트 위치를 제어
private RectTransform rectTransform;
// 흔들림 강도와 범위 설정
public float shakeAmount = 0.1f; // 흔들림 강도
public float shakeLimit = 10f; // 흔들림 제한
// 밑으로 이동하는 속도 설정
public float fallSpeed = 50f; // UI 좌표에서는 보통 작은 값을 사용
// 이동 시간을 제어하는 변수들
private float shakeDuration = 2.0f; // 흔들리기만 하는 시간
private float fallDuration = 5.0f; // 흔들리며 내려가는 시간
// 흔들림 변화 간격
public float shakeInterval = 0.01f; // 흔들림 변화 주기 (뚝뚝 끊기게 만드는 간격)
// 초기 위치 저장
private Vector2 originalPosition;
private Vector2 shakeOffset;
private float shakeTimer = 0f; // 흔들림 타이머
void Start()
{
// RectTransform 가져오기
rectTransform = GetComponent<RectTransform>();
originalPosition = rectTransform.anchoredPosition;
// 코루틴 시작
StartCoroutine(MoveObject());
}
// 코루틴 정의
IEnumerator MoveObject()
{
// 2.0초 동안은 흔들리기만 함
float timer = 0f;
while (timer < shakeDuration)
{
ShakeObject();
timer += Time.deltaTime;
yield return null; // 다음 프레임까지 대기
}
// 그 후 5.0초 동안은 흔들리며 밑으로 내려감
timer = 0f;
while (timer < fallDuration)
{
MoveDown();
ShakeObject();
timer += Time.deltaTime;
yield return null; // 다음 프레임까지 대기
}
}
// 흔들림 구현 함수
void ShakeObject()
{
shakeTimer += Time.deltaTime;
// 흔들림 타이머가 주기보다 크면 새로운 흔들림 값을 생성
if (shakeTimer > shakeInterval)
{
// 새로운 무작위 흔들림 값 생성
float offsetX = Random.Range(-shakeLimit, shakeLimit);
float offsetY = Random.Range(-shakeLimit, shakeLimit);
// 새로운 흔들림 값을 저장
shakeOffset = new Vector2(offsetX, offsetY);
// 타이머 초기화
shakeTimer = 0f;
}
// 현재 오브젝트의 좌표를 흔들림 값으로 업데이트
rectTransform.anchoredPosition = originalPosition + shakeOffset;
}
// 밑으로 내려가는 함수
void MoveDown()
{
// 점점 밑으로 내려가는 부분 (Y 축 감소, anchoredPosition 사용)
originalPosition.y -= fallSpeed * Time.deltaTime;
// 현재 오브젝트 위치도 업데이트
rectTransform.anchoredPosition = originalPosition+ shakeOffset;
}
}