유니티 빗물 받는 르탄이 만들기 #5 UI 구성
작성자 정보
- 마스터 작성
- 작성일
컨텐츠 정보
- 402 조회
- 목록
본문
빗물 받는 르탄이 만들기 과정
목차
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); // 생성함 함수 불러와서 비가 가지고 있는 점수 추가하기
관련자료
-
이전
-
다음