본문 바로가기

개발자_뉴비일지

내일배움캠프 Unity 2일차 TIL - 재미

 

string keyword="재미"

어제 1주차 강의를 다 듣지 못햇기에 오늘 이어서 진도를 나간다.

 

요약

빗방울 복제 및 스코어와 시간 설정

2주차강의 시작

풍선쉴드 완성

 

1.빗방울 복제

 

혼자 다해먹는 GameManager

일단 빗방울 복제를 위한 초석 게임매니저 만들기!

복제를 위해 frefabs폴더를 만들어 rain폴더를 넣어준다.

이전에 만들어두었던 rain을 그대로 드래그 앤 드랍해서 넣어준다.

 

public GameObject rain;

>>게임매니저에게 rain을 통제할 수 있는 권한을 줌

     rain을 가져다 쓸거다!

 


void Start()
{
    InvokeRepeating("makeRain", 0, 0.5f);
}
>>makeRain을 0.5초마다 만들어라!

void makeRain()
{
    Instantiate(rain);
}

>>빗방울 복제

 

2. 스코어 및 시간 설정

스코어를 올리고 남은시간을 보여주게 하는 밑작업.

폰트나 글자크기 등을 보기쉽게 배치해준다.

 

 

*중요

gamemanager는 전지전능하기에 단 하나만 존재해야 한다.

public static gameManager I;

void Awake()
{
    I = this;
}

>>게임매니저의 싱글톤화

 

 

빗방울이 캐릭터에 닿으면 없어질 수 있게 캐릭터에 어제 배웠던 collider와 tag를 걸어준다.

 

if(coll.gameObject.tag =="Rtan")

>>빗방울이 Rtan에게 닿으면
{
    Destroy(gameObject);

>>사라지고
    GameManager.I.addScore(score);

>>점수를 올려줌

}

 

public void addScore(int score)
{
    totalScore += score;
    scoreText.text=totalScore.ToString();
}

>>올라가는 점수를 text로 보여줌

 

 

panel 폴더를 유니티에 만들어주고 "끝! 다시?"를 셋팅한 후,

상단의 체크박스를 없애주면 게임시작 및 진행중에는 판넬이 뜨지 않는다.

 

점수올리기를 끝내면 이제 시간이 흐르고 0초가 되면 멈추게 해야한다.

 limit -= Time.deltaTime;

>>시간을 흐르게 하는 함수


 if (limit < 0)
 {
     limit = 0.0f;
     Time.timeScale = 0.0f;

>> 0초가 되면 시간이 멈추고

 

     panel.SetActive(true);
 }

>>판넬을 게임화면 상 띄운다.

 

 timeText.text = limit.ToString("N2");

>>N2는 소숫점 둘째자리까지 표시한다는 뜻이다.

 

 

3. 게임 초기화

 

판넬의 버튼을 누르면 게임이 초기화가 되는데, 이런 어마무시한 큰 일을 고작 판넬따위가 하지 못한다.

그래서 판넬에 함수를 입히고 그걸 다시 게임매니저가 실행하도록 해야한다.

 

 void iniGame()
 {
     Time.timeScale = 1.0f;
     totalScore = 0;
     limit = 5.0f;
 }

>>시간, 스코어 초기화

 

아래는 판넬폴더에서 작성!

public void retry()
{
    GameManager.I.retry();
}

>>판넬의 retry함수를 게임매니저가 대신 해줌

 

1주차 강의가 드디어 끝났다..

 

 

2주차 풍선쉴드

 

2주차는 풍선지킴이다.

 

1. 마우스가 가는대로.

 

하얀풍선위에 파란색 공이 풍선을 지켜야한다.

둘다 동그랗지만 하나는 풍선이고 하나는 공이다. 아무튼 그렇다.

 

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

>>공이 마우스좌표대로 움직이게 함. 

 

*위에서 네모가 떨어지거나 충돌하거나 랜덤생성 되는 것, 게임 끝내기 버튼 등등은 이미 배웠으므로 재탕해서 써먹는다.

 

2. 최고기록/현재기록

 

핵심은 점수!

 

public void gameover()
{
    isRunning = false;
    anim.SetBool("isDie", true);

>>죽을 때 풍선 터짐


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

    if(PlayerPrefs.HasKey("bestscore")==false)

>>최고기록이 없다면
    {
        PlayerPrefs.SetFloat("bestscore", alive);
    }

>>현재기록을 최고기록으로.
    else
    {
        if (alive > PlayerPrefs.GetFloat("bestscore"))

>>현재기록이 갖고있는 최고기록보다 높다면
        {
            PlayerPrefs.SetFloat("bestscore", alive);

>>최고기록을 현재기록으로 갈아치운다.
        }
    }
    float maxScore = PlayerPrefs.GetFloat("bestscore");
    maxScoreTxt.text = maxScore.ToString("N2");
}

PlayerPrefs

>>데이터를 보관할 수 있는 함수! 매우 중요해 보인다.

 

3. 풍선 터트리기

 

풍선의 애니메이션을 설정한다.

>>평소 풍선

>>터질때 풍선

>>터질 때 풍선엔 루프타임을 체크해제한다.

>>isDie일때 애니메이션이 전환되도록 해준다. 위의 gameover함수 참고.

 

오늘의 마무리

원래 목표는 어제 다 듣지 못한 1주차 강의를 마무리하고 2추차를 반정도라도 들어놓는 것이었다.

근데 게임 만들다보니 재밌어서 2주차 강의까지 끝!

매우 뿌듯.

 

.

.

with 야옹이들