
마우스 포인트 위치에 따라 파란 원이 따라 움직인다.
●마우스 포인터를 따라 움직이게 하기
<Shield.cs>
using UnityEngine;
public class Shield : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
// 스크린 상에서 떠돌아 다니는 마우스의 위치와 메인 카메라가 찍고 있는 게임 월드상의 위치를 갖게 해준다
Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); // 스크린상의 마우스 위치를 카메라가 찍고 있는 월드 좌표로 바꿔주는 함수
transform.position = mousePos;
}
}

●Image에 그림자 부여하기
1번을 누른다. 2번 Add Component를 클릭하고 3번에 Shadow를 입력한다.
4번을 클릭하면 5번처럼 생성이 되고 6번으로 그림자의 색을 바꿔줄 수 있다.
하얀 Image 뒤에 노란 그림자가 생긴 것을 확인할 수 있다.
●싱글톤
싱글톤이란? 너는 딱 하나야! 라고 할 수 있게 세팅해두는 것 -> 다른 곳에서 호출해 줄 수 있다.
<GameManager.cs>
public static GameManager Instance;
public void Awake()
{
if (Instance == null) // Null은 빈 공간을 의미
{
Instance = this; // Instance가 비어 있을 때 나 자신(this: this는 객체 자기 자신을 지칭할 때 사용)으로 채운다.
}
}

●재시작 (Retry)
게임 종료 후 다시하기 버튼을 눌렀을 때 게임이 다시 처음부터 시작되게 하는 과정
<RetryButton.cs>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement; // SceneManager을 사용하기 위해 필요
public class RetryButton : MonoBehaviour // 다시하기 버튼
{
public void Retry() // 재시도
{
SceneManager.LoadScene("MainScene"); // RetryBtn을 눌렀을 때 MainScene이 로드 됨
}
}
다시하기를 눌렀을 때 게임이 정상 작동하기 위해 시간을 재설정 해야 한다.
<GameManager.cs>
void Start() // 게임을 시작했을 때
{
Time.timeScale = 1.0f;
InvokeRepeating("MakeSquare", 0f, 1f); // 계속 반복 시키는 함수 / 시작 후 1초마다 네모를 생성한다
}


이런 순서로 RetryBtn을 눌렀을 때 Retry를 불러올 수 있다.
●점수 구현 (데이터 저장하기)
점수 저장 (데이터 저장)
PlayerPrefs.SetFloat("bestScore", 어떤숫자값);
PlayerPrefs.SetString("bestScore", 어떤문자열);
점수 불러오기 (데이터 불러오기)
어떤숫자값 = PlayerPrefs.GetFloat("bestScore");
어떤문자열 = PlayerPrefs.GetString("bestScore");
데이터를 저장했었는지 확인 (저장O: true, 저장X: false)
PlayerPrefs.HasKey("bestScore")
데이터를 모두 지우기
PlayerPrefs.DeleteAll();
●Balloon Animation (Balloon이 Square에 부딪혔을 때 발생하는 Animation 생성)




2번(transition) 클릭 후 has exit time을 체크 해제해야 즉시 전환된다.
체크를 해제하는 이유는 게임 종료 시 한 번만 풍선이 터지게 하기 위해서이다.
●점수 구현 + Balloon Animation을 합친 코드
<GameManager.cs>
public void GameOver() // 게임이 끝나면 (Balloon에 Square가 충돌했을 때)
{
isPlay = false; // 게임이 종료됨
anim.SetBool("isDie", true); // SetBool: Transotino이 동작하게끔 해 주는 기능 / isDie가 true일 때 풍선이 터지는 애니메이션이 실행
Invoke("TimeStop", 0.5f); // TimeStop을 0.5후에 실행
nowScore.text = time.ToString("N2"); // 현재 점수 / float자료형을 text에 넣을 수 있게 string자료형으로 바꿔줌
if(PlayerPrefs.HasKey(key)) // 최고점수가 있다면
{
float best = PlayerPrefs.GetFloat(key);
if(best < time) // 최고점수가 < 현재점수
{
PlayerPrefs.SetFloat(key, time); // 현재점수(time)를 최고점수에 저장한다.
bestScore.text = time.ToString("N2"); //소수점 둘째 자리까지 출력
}
else // 최고점수가 >= 현재점수
{
bestScore.text = best.ToString("N2"); // 최고점수(best)는 전에 저장된 점수 그대로 저장
}
}
else // 최고점수가 없다면
{
PlayerPrefs.SetFloat(key, time); // 현재 점수를 저장한다
bestScore.text = time.ToString("N2");
}
EndPanel.SetActive(true); // EndPanel 보이게 하기
}