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);
}