본문 바로가기

메모장/스네이크 게임

스네이크 게임 - 빌드 및 오브젝트 앵커 변경

 

 

아래 링크의 영상을 참고하여 안드로이드 플랫폼으로 빌드를 해보았다.
https://www.youtube.com/watch?v=IJxc-ANxO-w

 

하지만 기존에 제작한 대로 Build를 해보니
게임 화면에서 버튼들이 짤리는 현상이 발생했다.

 

기존에는 동시에 숨기거나 보이게 하는 버튼들을 빈 오브젝트에 묶어서 정리하였는데
이 방식으로는 문제가 생기기에 묶지 않는 방식을 택하였더니 해결되었다.

GameScene Hierarchy + GameManager Inspector

GameEnd 오브젝트 같은 경우는 화면 가운데에 뜨는 것이라
아무런 문제가 없기에 수정하지 않았다.

 

"일시정지" 버튼과 좌우에 있는 이동키들은 앵커를 사용하여
각각 좌측 상단, 좌측 하단, 우측 하단에 고정한 뒤 일정 간격을 두도록 설정하였다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour
{
    // for Setting
    public GameObject inSetting;
    public GameObject mainButton;

    // Snake Var
    public GameObject snake;

    // Score Var
    public Text scoreText;
    public int score = 0;

    // Pause Var
    bool isPause = false;
    public Text pauseText;

    // for Game Over & Clear
    public GameObject gameEnd;
    public GameObject[] gameButton;	// 배열로 처리
    public Text endText;

    void Update()
    {
        
    }

    // Start Button
    public void GameStart()
    {
        // Change Scene
        SceneManager.LoadScene(1);
    }

    // Setting Button
    public void GameSetting()
    {
        // On or Off the Object
        inSetting.SetActive(true);
        mainButton.SetActive(false);
    }

    // Back Button in Setting
    public void SettingBack()
    {
        // On or Off the Object
        inSetting.SetActive(false);
        mainButton.SetActive(true);
    }

    // Add Score
    public void AddScore(int point)
    {
        score += point;
        scoreText.text = string.Format("{0:n0}", score); // {0:n0}: 세자리마다 쉼표로 나눠주는 숫자 양식

        // Clear Check
        if (score >= 100)
        {
            GameClear();
        }
    }
    
    // Pause Game
    public void TimePause()
    {
        if (isPause)
        {
            // Resume
            Time.timeScale = 1;
            pauseText.text = "일시정지";
            isPause = false;
        }
        else
        {
            // Pause
            Time.timeScale = 0;
            pauseText.text = "다시시작";
            isPause = true;
        }
    }

    // Game Over
    public void GameOver()
    {
        Time.timeScale = 0;
        endText.text = "GAME OVER";
        gameEnd.SetActive(true);
        for (int i = 0; i < 3; i++)	// 배열이므로 반복문 사용
        {
            gameButton[i].SetActive(false);
        }
    }

    // Game Retry
    public void GameRetry()
    {
        SceneManager.LoadScene(1);
        Time.timeScale = 1;
    }

    // to Main Menu
    public void GameToMain()
    {
        // Change Scene
        SceneManager.LoadScene(0);
        Time.timeScale = 1;
    }

    // Game Clear
    public void GameClear()
    {
        Time.timeScale = 0;
        endText.text = "GAME CLEAR";
        gameEnd.SetActive(true);
        for (int i = 0; i < 3; i++)	// 배열이므로 반복문 사용
        {
            gameButton[i].SetActive(false);
        }
    }
}

GameManager에서 게임이 끝났을 때(게임 오버 또는 게임 클리어)
"일시정지" 버튼과 이동키가 사라지는 것을 관리하는데
스크립트에서 이 오브젝트들을 각각 연결받는 것이 아닌 배열로 처리함으로써
보다 깔끔하게 처리했다고 생각한다.

 

 

궁금하신 점은 밑에 댓글 바랍니다