유니티 게임 개발 2주차
오늘 배울 것
- 1주차 복습
- Rise Up과 비슷한 게임
- 풍선을 지켜라!
-> 네모가 풍선에 닿으면 끝나는 게임
--> 마우스 제어, 베스트 스코어 기록, 애니메이션 전환
- 사용한 주요 코드 및 프로그램 사용법
- 오브젝트는 myshield -> 우클릭 -> 2D object (or 알맞은것)
텍스트는 UI -> text (좌우정렬 해주기)
- 중력 효과 / 충돌 효과 : 오브젝트 클릭 - 우측아래 - Add Component - physics 2D - 알맞은것 추가
- gameManager : 전체적인 게임을 관장하는 역할
- prefab : 복제를 위해 미리 만들어두는 아이템
하나의 오브젝트(squre..) 생성 후 세팅 완료되면 Project 폴더에 [Prefabs] 폴더를 만들고 넣기
이후 기존 오브젝트 (square)는 삭제
- pannel : 판넬 (하나의 큰 UI 만들기..?)
판넬 안에 점수, 시간 등 여러가지가 들어가니, endPannel이라는 오브젝트를 만들고 그 안에 객체들 만들기
- 싱글톤 : 너는 딱 하나야! 라고 설정하는 것 -> 다른 cs에서 부를 수 있게 만듬
public static gameManager I;
void Awake()
{
I = this;
}
- 마우스 포인터를 따라가는 코드
void Update()
{
Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
transform.position = new Vector3(mousePos.x, mousePos.y, 0);
}
- 랜덤 위치에서 생성하기 / 랜덤 사이즈로 생성하기
void Start() // 시작하면
{
float x = Random.Range(-3.0f, 3.0f); // x 위치 설정
float y = Random.Range(3.0f, 5.0f); // y 위치 설정
transform.position = new Vector3(x, y, 0);
float size = Random.Range(0.5f, 1.5f); // 0.5에서 1.5사이 랜덤
transform.localScale = new Vector3(size, size, 1); // vector3 (x, y좌표 중 size 랜덤)
}
- prefab 을 반복 생성하게 하기
void Start() // 시작하면
{
InvokeRepeating("makeSquare", 0.0f, 0.5f); // makesquare함수 반복. 0.05f 마다
}
public GameObject square;
void makeSquare()
{
Instantiate(square);} /// square 생성하기
}
- 시간 올라가게 하기
float alive = 0f; // 0초부터
void Update()
{
alive += Time.deltaTime; // 1초씩 늘리기
timeTxt.text = alive.ToString("N2"); // timeTxt에 표현해라
}
- 게임 종료하기
~ 종료함수 만들기
public GameObject endPanel;
public void gameOver() // 게임오버되는 함수 만들거야
{
Time.timeScale = 0.0f; // 0.0f가 되면
endPanel.SetActive(true); // endpanel을 활성화시켜.
}
~ 종료 조건 만들기
void OnCollisionEnter2D(Collision2D coll)
{
if (coll.gameObject.tag == "balloon") // 만약 게임오브젝트가 balloon과 만나면
{
gameManager.I.gameOver(); // 게임오버 시켜
}
}
- 점수 보여주기
public Text thisScoreTxt; /// thisScoreTxt 설정하고
public void gameOver() /// 게임오버되는 함수
{
Time.timeScale = 0.0f; // 0초 되면
thisScoreTxt.text = alive.ToString("N2"); // 지금 스코어 보여줘
endPanel.SetActive(true); // 엔드판넬 활성화시켜
}
- Update()함수 멈추게하기 (게임종료 시 바로 점수가 멈추게하기)
bool isRunning = true; // (bool 함수는 기본값이 True)
void Update()
{
if (isRunning) // isRunning(현재 실행되고 있는 게 참이면)
{
alive += Time.deltaTime; // + 시키고
timeTxt.text = alive.ToString("N2"); // 보여줘
}
}
public void gameOver()
{
isRunning = false; // 현재 실행되고있다는게 거짓이되면
Time.timeScale = 0.0f; // 0초면
thisScoreTxt.text = alive.ToString("N2"); // 점수 보여줘
endPanel.SetActive(true); // 엔드판넬 보여줘
}
- 다시하기 만들기
~ 다시하기 함수 설정
using UnityEngine.SceneManagement; // SceneManagemet라는것을 써야함.
public void retry()
{
SceneManager.LoadScene("MainScene"); // retry함수 설정 (메인씬 다시 로드해줘)
}
~시간 다시 켜주기 (다시 시작되었는데 시간이 0이면 안되니깐)
void Start() // 스타트 코드에서
{
Time.timeScale = 1.0f; // 타임 1로 다시 설정해줘
InvokeRepeating("makeSquare", 0.0f, 0.5f); // 이거는 네모 만드는거 (게임 기본 설정)
}
****** 그리고 다시하기 UI 버튼에 방금 만든 retry()함수 설정해줘야 함 (코딩말고 unity에서)
- 최고점수 나타내기 (앱을 껏다 켜도 유지되도록 데이터 보관 / 불러오기)
public void gameOver()
{
isRunning = false;
Time.timeScale = 0.0f;
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); // 지금점수가 최고점수
}
}
}