게임 개발이 처음이어도 쉽게 배우는 모바일 게임 개발 2주차 03/24

정광훈(Unity_9기)·2025년 3월 24일

TIL (Today I Learned)

목록 보기
4/110
post-thumbnail

마우스 포인트 위치에 따라 파란 원이 따라 움직인다.

●마우스 포인터를 따라 움직이게 하기
<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 보이게 하기

}

0개의 댓글