1. 점수 시스템
과일이 합쳐질 때 레벨에 따라 점수가 추가되는 시스템을 만들었습니다.
1)
점수UI를 만들어줍니다.
2)
게임매니저에 점수UI의 텍스트를 드래그앤드랍합니다.
게임매니저 스크립트에서
네임스페이스에
using.UnityEngine.UI, using TMPro 추가.
멤버변수에
public TextMeshProUGUI txtScore 추가.
3)
Update함수에서 실시간 점수 갱신.
점수는 합쳐지고 레벨업할 때(Fruit.cs - LevelUpRoutine())
[GameManager.cs]
void Update()
{
txtScore.text = "Score: " + score.ToString();
}
[Fruit.cs]
public void LevelUp()
{
isMerge = true;
rigid.velocity = Vector2.zero;
rigid.angularVelocity = 0;
StartCoroutine("LevelUpRoutine");
}
IEnumerator LevelUpRoutine()
{
float scaleX = transform.localScale.x + 0.35f;
float scaleY = transform.localScale.y + 0.35f;
transform.localScale = new Vector3(scaleX, scaleY, 1);
yield return new WaitForSeconds(0.2f);
level++;
// 해당 레벨의 2배를 점수에 추가.
GameManager.instance.score += level * 2;
for (int i = 1; i < listSprite.Count; i++)
{
if (i == level)
{
spriteRenderer.sprite = listSprite[i];
}
}
}
2. 게임 시작
1)
배경은 약간 투명한 하얀색으로 설정.
타이틀 제목과 게임시작 버튼 추가.
2)
처음에는 점수, 데드라인 UI가 안보이게 설정.
게임시작 버튼을 누르면 게임스타트UI 디액티브,
점수, 데드라인UI 액티브,
과일생성 시작.
[GameManager.cs]
public GameObject objGameStart;
public GameObject objFinishLine;
public GameObject objScore;
void Awake()
{
// 타이틀 화면 액티브.
objGameStart.SetActive(true);
// 피니쉬라인 디액티브.
objFinishLine.SetActive(false);
// 점수창 디액티브.
objScore.SetActive(false);
}
public void OnClick_BtnGameStart()
{
//타이틀화면 디액티브.
objGameStart.SetActive(false);
// 피니쉬라인 액티브.
objFinishLine.SetActive(true);
// 점수창 액티브.
objScore.SetActive(true);
// 과일스포너의 과일생성 활성화.
fruitsSpawner.NextFruit();
}
3. 게임 종료
1)
게임종료화면 UI추가.
게임종료 텍스트, 재시작 버튼.
2)
데드라인에 과일이 닿으면 게임종료.
우선, 데드라인의 태그를 "Finish"로 변경한 후
[Fruits.cs]
void OnTriggerStay2D(Collider2D collision)
{
if(collision.tag == "Finish")
{
time += Time.deltaTime;
// 1초 이상 닿으면 과일이 빨갛게 변함.
if(time > 1)
{
spriteRenderer.color = Color.red;
}
// 3초 이상 닿으면 게임종료.
if(time > 3)
{
GameManager.instance.FinishGame();
}
}
}
void OnTriggerExit2D(Collider2D collision)
{
// 3초 안에 과일이 데드라인을 벗어난다면 시간은 다시 0. 컬러도 원래대로.
if(collision.tag == "Finish")
{
time = 0;
spriteRenderer.color = Color.white;
}
}
[GameManager.cs]
// 피니쉬라인에 3초이상 접촉하게 되어 호출되는 게임종료 함수.
public void FinishGame()
{
// 게임종료 화면 액티브.
objFinishGame.SetActive(true);
}
3)
재시작 버튼을 누르면
기존에 있던 과일 오브젝트 전부 Destroy.
점수 초기화.
게임종료창 디액티브.
[FruitSpawner.cs]
public class FruitsSpawner : MonoBehaviour
{
// 생성된 과일 오브젝트를 담을 리스트.
public List<GameObject> listFruits = new List<GameObject>();
//초기화 함수 추가.
public void Init()
{
lastFruit = null;
foreach (var fruit in listFruits)
{
Destroy(fruit);
}
listFruits.Clear();
}
}
[GameManager.cs]
public class GameManager : MonoBehaviour
{
// 게임종료 후 재시작 버튼을 눌렀을 때 호출.
public void OnClick_Restart()
{
// 스탯 초기화.
Init();
// 게임종료 화면 디액티브.
objFinishGame.SetActive(false);
// 과일생성 활성화.
fruitsSpawner.NextFruit();
}
// 정수 초기화 및 과일 스포너 초기화 함수 호출.
public void Init()
{
score = 0;
fruitsSpawner.Init();
}
}
'Unity > Unity 물리기반 Merge게임 프로젝트(수박라이크)' 카테고리의 다른 글
[Unity 게임 프로젝트] 물리기반 머지게임(5) - 오디오 시스템 추가 (0) | 2024.04.29 |
---|---|
[Unity 게임 프로젝트] 물리기반 머지게임(3) - 오브젝트 합치기, 애니메이션 (0) | 2024.04.29 |
[Unity 게임 프로젝트] 물리기반 머지게임(2) - 데드라인 오브젝트 추가, 과일 오브젝트 추가 및 프리팹화, 마우스 포인터를 이용한 오브젝트 이동 및 이동제 (0) | 2024.04.23 |
[Unity 게임프로젝트] 물리기반 머지게임(1) - 모바일 설정, 배경화면 및 콜라이더 오브젝트 추가 (0) | 2024.04.23 |