2023.10.13 오늘의 기록

2023. 10. 13. 21:04카테고리 없음

2주차 완강, 3주차 3-5까지

 

2주차 (풍선을 지켜라)

 

떨어지는 풍선을 최대한 막아주는 게임을 만들어보았다.

 

1. 기본 세팅 및 배경 만들기

-간단한 배경과 gameObject를 만들어 틀을 만들어준다.

 

2. 애니메이션 더하기

-풍선이 터지는 애니메이션을 만들어야해서 Animation 폴더를 만들어준다.

 

3. 마우스에 움직임 더하기

-Scripts를 활용하여 코딩을 통해 마우스에 움직임을 더해준다.

void Update()

{

Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); transform.position = new Vector3(mousePos.x, mousePos.y, 0);

}

 

4. 네모 떨어지게 하기/ 충돌효과 주기

-유니티에서 기본적인 효과를 만들 수가 있는데, Add component 기능을 사용한다.

rigidbody, collider 사용

 

5. 게임제작에 중요한 요소인 gameManager를 만들어준다.

- gameObject 와 script 를 만들고 서로 연결해주는 역할

 

6. 네모 랜덤 위치에서 생성하기

void Start()
{
    float x = Random.Range(-3.0f, 3.0f);
    float y = Random.Range(3.0f, 5.0f);

    transform.position = new Vector3(x, y, 0);

 

    float size = Random.Range(0.5f, 1.5f);

    transform.localScale = new Vector3(size, size, 1);
}

prefab 프리팹은? 복제를 위해 미리 만들어둔 아이템

- 반복실행 코딩

public GameObject square; => 이름표를 만들어주는 역할

void Start()
{
    InvokeRepeating("makeSquare", 0.0f, 0.5f); => 반복실행
}

void makeSquare()
{
    Instantiate(square);  => 복제
}

 

7. 시간 올라가게 하기

-시간을 만들어줄  UI text를 만들어준다.

using UnityEngine.UI;

public Text timeTxt;

-시간 올리기

float alive = 0f;

void Update()
{
    alive += Time.deltaTime;
    timeTxt.text = alive.ToString("N2");
}

 

8. 게임 끝내기 판넬 만들기

-풍선이 닿아 게임을 종료하는 방법이다.

Canvas → endPanel 게임오브젝트로 모두 묶는다.

 

9. gameManager 싱글톤 처리하기

-싱글톤이란? 너는 딱 하나야! 라고 할 수 있게 세팅해두는 것

public static gameManager I;

void Awake()
{
    I = this;
}

-게임 종료하기

public GameObject endPanel;

public void gameOver()
{
    Time.timeScale = 0.0f;
    endPanel.SetActive(true);
}

-네모가 풍선과 부딪히면 게임 종료하는 조건만들기

풍선에 "balloon" tag 만들어주기

void OnCollisionEnter2D(Collision2D coll)
{
    if (coll.gameObject.tag == "balloon")
    {
        gameManager.I.gameOver();
    }
}

10. 마무리 디테일 작업 (현재점수와 최고기록)

public Text thisScoreTxt;

-게임 종료 수정하기

public void gameOver()
{
    Time.timeScale = 0.0f;
thisScoreTxt.text = alive.ToString("N2");
    endPanel.SetActive(true);
}

- Update()와 gameOver() 간의 약간의 시간차가 있기 때문에, 이것을 제어

bool isRunning = true;

void Update()
{
    if (isRunning)
    {
        alive += Time.deltaTime;
        timeTxt.text = alive.ToString("N2");
    }
}

public void gameOver()
{
    isRunning = false;
    Time.timeScale = 0.0f;
    thisScoreTxt.text = alive.ToString("N2");
    endPanel.SetActive(true);
}

-게임 종료 후 재시작

using UnityEngine.SceneManagement;

public void retry()
{
    SceneManager.LoadScene("MainScene");
}

 

void Start()
{
    Time.timeScale = 1.0f;
    InvokeRepeating("makeSquare", 0.0f, 0.5f);
}

-최고 점수 나타내기

public Text bestScoreTxt;


public void gameOver()
{

    anim.SetBool("isDie", true);


    isRunning = false;

    Invoke("timeStop", 0.5f);
    thisScoreTxt.text = alive.ToString("N2");
    endPanel.SetActive(true);

    if (PlayerPrefs.HasKey("bestScore") == false)
    {
        PlayerPrefs.SetFloat("bestScore", alive);
    }
    else
    {
        if (PlayerPrefs.GetFloat("bestScore") < alive)
        {
            PlayerPrefs.SetFloat("bestScore", alive);
        }
    }

    bestScoreTxt.text = PlayerPrefs.GetFloat("bestScore").ToString("N2");
}

 

void timeStop()

{

Time.timeScale = 0.0f;

}

 

-마지막 숙제 떨어지는 풍선이 계속 중첩되어 일정부분에서 사라지게 만들기

if (transform.position.y < -5.0f)

{

Destroy(gameObject);

}