내일배움캠프

내일배움캠프 Unity - 사전캠프 (라이즈업 풍선게임)

달시_Dalsi 2025. 1. 8. 17:24
728x90

위에서 떨어지는 사각형의 오브젝트들을 마우스로 막아 하단 중앙의 풍선(원 오브젝트)에 닿지 않게 해야하는 게임입니다.

생존해있는동안 측정되는 시간이 곧 점수입니다.

데이터 저장 기능을 활용하여 최고 점수 기록 기능이 있습니다.

 

 

 

장애물(Square) 스크립트

using System.Drawing;
using UnityEngine;
using UnityEngine.SocialPlatforms.Impl;

public class Square : MonoBehaviour
{
    float size; // 크기
    Vector2 randomPos; // 생성 위치

    void Start()
    {

        randomPos = new Vector2(Random.Range(-3f, 3f), Random.Range(3f, 5f));
        transform.position = randomPos;

        size = Random.Range(.5f, 1.5f);
        transform.localScale = new Vector2(size, size);
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Balloon")) // 풍선과 충돌시 게임 끝
        {
            GameManager_riseUP.instance.GameEnd();
        }
        else if(collision.gameObject.CompareTag("DestroyCollider")) // 화변 밖에 설치한 콜라이더
        {
            Destroy(gameObject);
        }
    }
}

 

게임 매니저 스크립트

using UnityEngine;
using System.Collections;
using TMPro;
using UnityEngine.SceneManagement;

public class GameManager_riseUP : MonoBehaviour
{
    public static GameManager_riseUP instance;

    float newScore = 0;
    float bestScore = 0;

    [SerializeField] Animator balloon_Anim;
    [SerializeField] GameObject g_retryPanel; // 재시작 패널
    [SerializeField] TextMeshProUGUI textMeshPro_Time; // 남은 시간 UI 텍스트
    [SerializeField] TextMeshProUGUI textMeshPro_newScore; // 이번판 점수 UI 텍스트
    [SerializeField] TextMeshProUGUI textMeshPro_bestScore; // 최고 점수 UI 텍스트
    [SerializeField] Transform tf_groupSquare; // 생성할 부모 객체
    [SerializeField] GameObject Prefabs_Square; // 프리팹

    string scoreKey = "BestScore";

    private void Awake()
    {
        if(instance == null) { instance = this; }            
    }

    void Start()
    {
        Time.timeScale = 1;
        StartCoroutine(spwanSquare()); // 생성 시작
    }


    void Update()
    {
        newScore += Time.deltaTime;
        textMeshPro_Time.text = newScore.ToString("F2");
    }

    IEnumerator spwanSquare()
    {
        while (true)
        {
            Instantiate(Prefabs_Square, tf_groupSquare);
            yield return new WaitForSeconds(1f);
        }
    }

    public void GameEnd()
    {
        Time.timeScale = 0f; // 게임 일시정지

        balloon_Anim.SetBool("isDie", true);

        textMeshPro_newScore.text = newScore.ToString("F2");

        if(PlayerPrefs.HasKey(scoreKey))
        {
            bestScore = PlayerPrefs.GetFloat(scoreKey);

            if (bestScore < newScore)
            {
                PlayerPrefs.SetFloat(scoreKey, bestScore);
                textMeshPro_bestScore.text = newScore.ToString("F2");
            }
            else
            {
                textMeshPro_bestScore.text = bestScore.ToString("F2");
            }
        }
        else
        {
            PlayerPrefs.SetFloat(scoreKey, newScore);
            textMeshPro_bestScore.text = newScore.ToString("F2");
        }

        g_retryPanel.SetActive(true); // 재시작 패널 활성화
    }

    public void Retry()
    {
        SceneManager.LoadScene("riseUP");
    }
}

 

쉴드 스크립트

using UnityEngine;

public class shield : MonoBehaviour
{
    void Update()
    {
        Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        transform.position = mousePos;
    }
}

 


Unity Play에 업로드된 제 게임을 아래 링크에서 플레이할 수 있습니다.

 

https://play.unity.com/ko/games/38b56561-1e7e-461e-b74b-39e59edec217/campriseup

 

camp_riseUP on Unity Play

like riseUP game

play.unity.com

 

728x90