고양이 5마리를 배부르게 하면 1레벨이 오르는 레벨링 시스템을 구현해보겠습니다.
게이지가 차오르는 UI 설정은 아래 게시글들을 참고해주세요.
2024.04.03 - [Unity/2D] - [Unity/2D] 체력바 만들기 - Canvas, UI, Anchors
2024.04.03 - [Unity/2D] - [Unity/2D] 체력바 게이지 상승하는 코드 작성 - UI, OnTriggerEnter2D, localScale
GameManager.cs
public RectTransform levelFront;
public Text levelTxt;
int level = 0; // 현재 레벨
int score = 0; // 점수 5점당 1레벨
public void AddScore()
{
score++;
level = score / 5; // 0~4는 0레벨, 5~9는 1레벨 이런식으로 몫을 구함
levelTxt.text = level.ToString();
levelFront.localScale = new Vector3((score - level * 5) / 5.0f, 1f, 1f); // ex. 점수가 12면 12 - 10 = 2가 됨
// 소수점값을 얻기 위해 5.0f(실수값)으로 나누어줌
}
게임매니저에서 점수가 오르는 함수를 작성했습니다.
Cat.cs
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.CompareTag("Food"))
{
if(energy < full) // 현재 체력 < 전체 체력
{
// 체력바 게이지 상승
energy += 1.0f;
front.localScale = new Vector3(energy / full, 1.0f, 1.0f); // 현재 체력을 최대 체력으로 나누어서 비율을 계산
// 고양이에게 맞은 Food는 파괴
Destroy(collision.gameObject);
// 게이지가 다 차고 바로 fullCat으로 바뀌게 하기 위해서 여기에 코드 작성
if (energy == 5.0f) // 체력바가 다 찬 상태
{
// 점수를 더할 때 배가 부른 고양이가 Food에 또 맞게 되면 발생하는 문제 방어
if (!isFull)
{
isFull = true;
hungryCat.SetActive(false);
fullCat.SetActive(true);
Destroy(gameObject, 3.0f); // 3초 후 고양이 파괴
GameManager.Instance.AddScore();
}
}
}
}
}
배가 부른 고양이가 되면 GameManager.Instance.AddScore(); 로 점수를 획득하게 구현했습니다.
'isFull'을 넣은 이유는 'if (energy == 5.0f)' 조건문만 있었을 때 배가 부른 고양이가 Food에 또 맞게 되면 점수가 오르기 때문에 이를 방지하고자 넣었습니다.
결과
반응형
'스파르타 게임개발종합반(Unity) > 사전캠프 공부 기록' 카테고리의 다른 글
[Unity] 프리팹 인스턴스 언패킹 - Unpack (0) | 2024.04.04 |
---|---|
[Unity] Prefabs 확률로 생성하기, 게임 규칙 추가하기 (0) | 2024.04.04 |
[Unity/2D] 체력바 게이지 상승하는 코드 작성 - UI, OnTriggerEnter2D, localScale (2) | 2024.04.03 |
[Unity] Prefab을 Hirarchy창에서 변경했을 때 기존 Prefab에도 변경사항 적용하는 법 (0) | 2024.04.03 |
[Unity] 밑에서 위로 올라가는 물체의 중력 - Rigidbody, Dynamic, Kinematic 차이 (0) | 2024.04.03 |
댓글