유니티

유니티 빗물 받는 르탄이 만들기 #5 UI 구성

작성자 정보

  • 마스터 작성
  • 작성일

컨텐츠 정보

본문

빗물 받는 르탄이 만들기 과정

 

목차

1.유니티 씬 설정하기

2.캐릭터 움직이기

3.비 내리기 (오브젝트 관리)

4.충돌 구현

5.UI 구성

6.게임오버 구현

 

1.하이라키 패널에서 UI 생성하기

1-1 하이라키 패널 오른쪽 클릭 > UI > Legacy > Text 선택하기

1-2 생성한 text를 선택 후 Inspector 패널에서 width 와 Height를 각각 200으로 설정 

(본인이 원하는 적당한 사이즈로 설정하기)

1-3 Inspector 패널 Text에서 Font 변경하기 (원하는 폰트로)

눈누 사이트에서 폰트 찾아서 다운로드 가능

ㄴ 폰트 적용후 적정한 사이즈로 조절 후 위치 조절하기

1-4 생성한 Text를 3개 더 복하기

1-5 각 오브젝트의 이름을 빗방울, Score, 남은시간, Time으로 바꾸기

1-6 Inspector 패널 Text에서 Text 바꾸기

ㄴ 빗방울은 빗방울로, Score는 0, 남은시간은 남은시간으로, Time은 00.00으로 바꾼다.

 

2.gameManager.cs 추가하기

2-1 gameManager.cs 전체코드

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;


public class gameManager : MonoBehaviour

{


    public GameObject rain;

    public static gameManager i;

    public Text scoreText;

    public Text timetText;

    int totalScore = 0;

    public float limit = 60.0f;


    void Awake()

    {

        i = this;

    }


    void Start()

    {

        InvokeRepeating("makeRain", 0, 0.5f);

    }

 

    void Update()

    {

        limit -= Time.deltaTime;

        if(limit < 0)

        {

            Time.timeScale = 0.0f;

            limit = 0.0f;

        }

        //소수점 2째 자리까지 N2 

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

    }


    void makeRain()

    {

        Instantiate(rain);

    }


    public void addScore(int score)

    {

        totalScore += score;

        scoreText.text = totalScore.ToString();

    }

}


2-2 생성한 UI text들을 연결하기 위해 public Text scoreText 와 timeText를 설정함

ㄴ public Text scoreText;

ㄴ public Text timetText;

 

2-3 gameManager를 싱글톤으로 만들어 다른 스크립트에서도 게임매니저에 접근이 가능하도록 셋팅함

ㄴ public static gameManager i; 

 

2-4 위에서 설정한 gameManager i를 활성화 하기

void Awake(){

    i = this;

} 

 

2-5 변수 설정

ㄴ int totalScore = 0; //점수를 계산할 변수

ㄴ public float limit = 60.0f; //게임 시간을 설정한 limit 변수 설정, public으로 유니티에서도 제어하게 끔 설정

 

2-6 남은 시간 업데이트 하기

void Update(){

    limit -= Time.deltaTime;

    if(limit < 0)

    {

        Time.timeScale = 0.0f;

        limit = 0.0f;

    }

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

}

ㄴ Update() // 매초 돌아가는 함수

ㄴ limit에 Time.deltaTime을 뺀다. //매초 float로 초가 감소함

ㄴ limit이 0보다 작아지면

ㄴ Time.timeScale을 0.0f으로 변경하여 초가 흐르지 않게 하고 limit을 0으로 설정해준다.

ㄴ timetText.text//설정한 UI TEXT의 text값을 설정한다.

ㄴ limit.ToString("N2"); // float을 문자열로 바꾸는 함수 N2는 소수점 2번째 까지 유효하게 해줌

 

 

2-7 점수 업데이트 하기 

 

public void addScore(int score)

{

    totalScore += score;

    scoreText.text = totalScore.ToString();

 

}

ㄴ 점수는 비와 르탄이가 충돌시 올려줘야 하기에 함수를 만들어서 충돌 감지시 점수가 올라가게 반영하기

ㄴ 변수에 점수를 더하여 ToString()을 사용해 문자열로 표기하기

 

 

3.rain.cs 추가하기

3-1 rain.cs 전체코드

using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class rain : MonoBehaviour

{

    int type;

    float size;

    int score;

    // Start is called before the first frame update

    void Start()

    {

        float x = Random.Range(-2.7f, 2.7f);

        float y = Random.Range(3.0f, 5.0f);

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


        //1~3까지 

        type = Random.Range(1, 5);


        if (type == 1){

            size = 1.2f;

            score = 3;

            GetComponent<SpriteRenderer>().color = new Color(100 / 255f, 100 / 255f, 255 / 255f, 255 / 255f);


        }else if (type == 2){

            size = 1.0f;

            score = 2;

            GetComponent<SpriteRenderer>().color = new Color(130 / 255f, 130 / 255f, 255 / 255f, 255 / 255f);


        }else if (type == 3)

        {

            size = 0.8f;

            score = 1;

            GetComponent<SpriteRenderer>().color = new Color(150 / 255f, 150 / 255f, 255 / 255f, 255 / 255f);


        }

        else

        {

            size = 1.0f;

            score = -5;

            GetComponent<SpriteRenderer>().color = new Color(255 / 255f, 0 / 255f, 0 / 255f, 255 / 255f);


        }


        transform.localScale = new Vector3(size, size, 0);

    }


    // Update is called once per frame

    void Update()

    {

        

    }

    //충돌 이벤트 처리

    void OnCollisionEnter2D(Collision2D coll)

    {

        if (coll.gameObject.tag == "ground"){

            Destroy(gameObject);

        }

        

        if(coll.gameObject.tag == "rtan"){

            gameManager.i.addScore(score);

            Destroy(gameObject);

        }

    }


}


 3-2 충돌이벤트에서 gameManager에서 생성한 함수 가져와서 점수 추가하기

if(coll.gameObject.tag == "rtan"){

    gameManager.i.addScore(score);

    Destroy(gameObject);

} 

ㄴ gameManager.i.addScore(score); // 생성함 함수 불러와서 비가 가지고 있는 점수 추가하기 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

최근글


새댓글


알림 0