본문 바로가기
게임 제작/뉴진스 파워퍼프걸 팬게임

뉴진스 파워퍼프걸 팬게임 제작 (17)_ Game Over & Ranking Scene 구현 (New jeans Powerpuff girls fangame)

by 나는반딧불 2023. 9. 6.
반응형

뉴진스 파워퍼프걸 팬게임 제작 (17)_ Game Over & Ranking Scene 구현

이번 글에서는 플레이어 캐릭터의 life와 hp가 0이 되었을때

Game Over Scene으로 넘어가는 것과 

Ranking Scene으로 넘어 가는 것을 구현할 예정이다.

 

 

이번 글의 목표

캐릭터 기절 처리 구현

Game Over Scene 구현

Raking Scene 구현

 

 

 

1. 캐릭터 기절 처리 구현

 

1.1 스크립트 추가

void Update () {

        if(hp_now<=0)
        {
            if (life_now > 0)  //라이프가 0이 아니라면
            {
                life_now--;  //라이프 감소하고
                hp_now = 5; //hp는 풀회복
                
            }

            else    //라이프가 0이하라면
            {
               // die_bgm.Play();
                PlayerPrefs.SetInt("Score", scoreCount);//스코어 저장
                gameObject.GetComponent<PlayerMoveCtrl>().enabled=false;  //이동 끄기
                gameObject.GetComponent<Effect_move>().enabled = false;  //이동 효과 끄기
                gameObject.GetComponent<Fire_rockman>().enabled = false; // 공격 끄기
                gameObject.GetComponent<BoxCollider2D>().isTrigger = true; //모든 물체 통과하기
                gameObject.GetComponent<Rigidbody2D>().gravityScale = 2; //중력 켜기
            }
            
        }

플레이어의 hp와 life가 모두 0이 된다면

먼저 현재 점수를 PlayerPrefs를 사용하여 저장해주고

모든 조작키 스크립트를 비활성화 해준다.

그리고 isTrigger을 활성화 해서 어떤 물체든 통과시키게 만든 후

0으로 설정되어 있던 gravityScale값을 2로 바꾸어서 아래로 떨어지게 만든다.

 

using UnityEngine.SceneManagement;
 private void OnTriggerEnter2D(Collider2D other)
    {
     else if (other.tag =="FALL")
        {
            SceneManager.LoadScene("GAMEOVER");
        }

    }

그리고 물리 충돌 함수에 FALL이란 오브젝트와 충돌하면

GAMEOVER Scene으로 넘어가게 만든다.

그리고 SceneManger를 사용하기 위해 스크립트 상단에

using UnityEngine.SceneManagement;를 추가해준다.

 

 

1.2 FALL 오브젝트 제작

게임화면 하단에 있던 DownWall을 복사해 조금더 아래에 배치해주고

이름과 태그를 FALL로 바꿔준다.

이제 플레이어가 체력을 모두 잃고 기절하게 되면

중력에 의해 아래로 떨어지게 되고

자동으로 FALL과 부딪히게 되어 GAMEOVER Scene으로 넘어가게 된다.

 

 

 

 

2. GAME OVER Scene 구현

 

2.1 이미지 및 텍스트 배치

새로 GAMEOVER 이름을 가진 Scene을 만들어주고

하늘 배경 이미지와 TEXT를 추가해준다.

글자 폰트는 Text(TMP)에서 제공하는 폰트중 Electronic Highway Sign SDF를 사용하여

레트로한 느낌을 주었다.

 

 

2.2 RANKING SCENE으로 넘어가는 스크립트 작성

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameoverCtrl : MonoBehaviour
{
 public float time = 3f;
    void Update()
    {
        Invoke("loadScene", time);
    }

    void loadScene()
    {
        SceneManager.LoadScene("RANKING");
    }
}

GAMEOVER Scene이 불러와지고 3초가 지나면 

자동으로 RANKING Scene으로 이동되게 작성했다.

 

 

2.3 스크립트 추가

방금 작성한 스크립트를 Scene의 아무 오브젝트에 추가해준다.

 

 

3. RANKING SCENE 구현

 

3.1 이미지 및 텍스트 배치

RANKING 이름을 가진 Scene을 새로 만들고

위 이미지와 같이 하늘 배경에 텍스트를 배치했다.

 

 

3.2 랭킹 스크립트 작성

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;

먼저 UI를 사용할거기 때문에 

using UnityEngine.UI; 와 using TMPro; 를 작성해준다.

 

 

    public TMP_Text Score_first_t;  // 1등 점수 Text
    public TMP_Text Score_second_t;
    public TMP_Text Score_third_t;
    public TMP_Text Score_now_t;

    int Score_first_i=0;  //1등 점수 int
    int Score_second_i=0;
    int Score_third_i=0;
    int Score_now_i=0;

1등,2등,3등,현재점수의 Text와 int형 변수를 각각 선언해준다.

 

void RankSet()  //랭킹 점수 불러오기
    {
        
        Score_first_i = PlayerPrefs.GetInt("1st");
        Score_second_i = PlayerPrefs.GetInt("2nd");
        Score_third_i = PlayerPrefs.GetInt("3rd");
        Score_now_i = PlayerPrefs.GetInt("Score");

    }

기존에 저장되어 있던 랭킹 점수를 불러와 int형 변수에 저장해준다.

 

    void Rank()  //현재점수와 랭킹점수 비교 및 배치 함수
    {
        if(Score_now_i>Score_first_i) //1등보다 크면
        {
            Score_third_i = Score_second_i;
            Score_second_i = Score_first_i;
            Score_first_i = Score_now_i;
        }
        else if (Score_now_i < Score_first_i&& Score_second_i<Score_now_i) //1등보다 작고 2등보다 크면
        {
            Score_third_i = Score_second_i;
            Score_second_i = Score_now_i;
        }
        else if (Score_now_i < Score_first_i && Score_second_i < Score_now_i) //2등보다 작고 3등보다 크면
        {
            Score_third_i = Score_now_i;
        }
    }

현재 점수와 랭킹 점수를 비교하여 랭킹 점수를 다시 재배열하게 작성한다.

 

 void RankExpress()
    {
        Score_first_t.text = Score_first_i.ToString("D7");//앞에 남는 자리수는 전부 0으로 입력
        Score_second_t.text = Score_second_i.ToString("D7");
        Score_third_t.text = Score_third_i.ToString("D7");
        Score_now_t.text = Score_now_i.ToString("D7");
    }

재배열한 랭킹 점수값을 ToString을 사용하여 Text로 변환시켜준다.

ToString("D7")을 사용하면 7자리 내에 값이 입력된 나머지 칸들을 0으로 채워준다.

예를들어 점수가 1234점이라면 Text는 0001234로 표시된다.

void RankSave()   //종료전 랭킹 점수 저장
    {
        PlayerPrefs.SetInt("1st", Score_first_i);
        PlayerPrefs.SetInt("2nd", Score_second_i);
        PlayerPrefs.SetInt("3rd", Score_third_i);

    }

 RANKING SCENE을 벗어나기전 현재 랭킹 점수를 저장하게 작성한다.

 

void Start()
    {
        RankSet();
        Rank();
        RankExpress();
        RankSave();
    }

방금까지 작성한 함수들을 위 순서대로 Start함수에 넣어준다.

 

 

 

3.3 RankCtrl 오브젝트 생성 및 스크립트 추가

빈 오브젝트를 생성해주고 RankCtrl로 이름을 바꿔준다.

해당 오브젝트에 RankingCtrl스크립트를 추가해주고

Text오브젝트들을 알맞게 배치해준다.

 

 

4. Build Settings

Bulid Settings 창을 열어 이번에 만든 두 Scene을 드래그해 집어 넣어준다.

 

 

5. 결과물

캐릭터의 hp와 life가 0이되면 바닥으로 떨어지고

GAME OVER Scene으로 넘어간 뒤 잠시후

점수가 표시된 RANKING Scene으로 넘어가는 것을 확인할 수 있다.

 

 

다음글에서는 타이틀 씬과 캐릭터 선택 씬을 구현할 계획이다.

반응형