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

뉴진스 파워퍼프걸 팬게임 제작 (16)_ Scene 변경 (New jeans Powerpuff girls fangame)

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

뉴진스 파워퍼프걸 팬게임 제작 (16)_ Scene 이동 

이번 글에서는 Stgae1의 마지막 Wave인 Wave4를 레벨디자인 하고

목표에 도달했을때 다음 씬으로 넘어가는 것을 구현할 계획이다.

 

 

이번 글의 목표

wave4 레벨디자인

Scene 이동 구현

 

 

1. Wave4 레벨 디자인

 

1.1 오브젝트 배치

Wave4의 레벨디자인은 뮤직비디오에 나오는 게임화면과 똑같은 구성으로 배치했다.

 

 

 

wave4 끝에 있는 벽을 뚫고 지나지 못하게 만들기 위해  

벽에 오른쪽 이동 불가 물리충돌 컴포넌트를 추가하고

하위의 오브젝트에 캐릭터를 밀어내는 물리충돌 컴포넌트를 추가했다.

 

끝으로 Fadeout이라는 하얀색 이미지를 크게 넓혀 추가해주고

투명도를 높여서 아무것도 보이지 않게 만들었다.

이 오브젝트는 Fadeout 이벤트시 사용할 예정이다.

 

플레이어 오브젝트 하위에는 응원봉 이미지 오브젝트를 추가해주고

보이지 않게 비활성화 시켜준다.

 

 

 

1.2 Wave4Ctrl 작성

    public GameObject wall;  //스테이지 끝 벽
    public GameObject key;  // 손에 드는 응원봉
    public GameObject fadeout; // 하얀색 화면
    private GameObject player; //플레이어
    
    private Transform tr; //벽 transform
    public float goalx =12.49f;

    private bool SceneEndBool = false;
    private bool EndBool = false;
    public float colorv = 0;  //투명도값
    public float fadespeed = 0.9f; //fadeout 속도

위 변수들을 사용하여

목표지점 도착시 플레이어가 응원봉을 들고,

화면이 하얗게 변하며 다음씬으로 넘어가게 만들 생각이다.

 

 

 void Start()
    {
        tr = wall.GetComponent<Transform>();
        player = GameObject.Find("Player");
        
    }

start함수에서는 벽과 플레이어 변수를 초기화해준다.

플레이어로 초기화하는 이유는 씬이 넘어갈때

플레이어 스크립트에 있는 변수에 접근해야하기 때문이다.

 

 

  void fadeoutStart()
    {
        EndBool = true;
    }

먼저 invoke함수에 쓰기 위한 간단한 bool변환 함수를 작성해준다.

 

void setprefab()  //데이터 보관  
    {
        PlayerPrefs.SetInt("Score",player.GetComponent<Player_hpCtrl>().scoreCount);
        PlayerPrefs.SetInt("Cookie", player.GetComponent<Player_hpCtrl>().cookieCount);
        PlayerPrefs.SetInt("Rabbit", player.GetComponent<Player_hpCtrl>().rabbitCount);
        PlayerPrefs.SetInt("Hp", player.GetComponent<Player_hpCtrl>().hp_now);
        PlayerPrefs.SetInt("Mp", player.GetComponent<Player_hpCtrl>().mp_now);
        PlayerPrefs.SetInt("Life", player.GetComponent<Player_hpCtrl>().life_now);
    }

그리고 씬 이동시 데이터값들을 다른씬에서 접근할 수 있도록

prefab을 활용하여 현재 데이터값들을 전부 저장해준다.

void Update()
    {
        if(tr.position.x<goalx) //목적지에 도달하면
        {
            tr.SetParent(null);  //부모 자식 관계 분리
            Invoke("fadeoutStart", 1.5f);
        }
        
        if(EndBool)
        {
            
            key.SetActive(true); //손에 응원봉 들게 하기
            SceneEndBool = true;

        }

        if(SceneEndBool)  //페이드 아웃 시작
        {
            fadeout.GetComponent<SpriteRenderer>().color = new Color(1f, 1f, 1f, colorv);// 투명도 점점 감소
            colorv += fadespeed * Time.deltaTime;

        }
        
         if(colorv>1)  //완전히 화면이 뒤덮이면 데이터 저장
        {
            setprefab();

        }

    }

wave4가 좌로 이동하면서 자식에 속해있는 벽 오브젝트가 특정 지점에 도달하면

부모 자식 관게를 해지해 wave4를 따라 좌로 이동하지 않게 해준다.

그다음 1.5초후에 손 앞의 응원봉을 활성화 시켜주고

동시에 흰 이미지의 투명도를 지속적으로 낮춰서  페이드 아웃을 진행시켜준다.

 

 

 

1.3 스크립트 추가 및 배치

wave4에 작성한 스크립트를 추가해주고 각 빈칸에 오브젝트들을 배치해준다.

 

 

 

2. Scene 이동 구현

 

2.1 스크립트 추가 작성

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

아까 만든 wave4Ctrl 스크립트 가장 상단에 

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

이걸 선언해줘야만 씬 로드하는 함수를 사용할 수 있다.

 

if(colorv>1)  //완전히 화면이 뒤덮이면 데이터 저장 후다음씬 호출
        {
            setprefab();
            SceneManager.LoadScene("STAGE2");

        }

그리고 Update 마지막에 있던 조건문에서 

 SceneManager.LoadScene("STAGE2");를 써서 STAGE2 씬으로 넘어가게 만든다.

 

 

2.2 Scene Build Setting

STAGE2 씬은 아직 만든적 잆으니 project창에서 우클릭후 Create-Scene을 눌러 생성해준다.

 

 

생성된 Scene의 이름을 STAGE2로 변경해준다.

 

그럼 이제 Buil Setting을 해야할 차례이다.

좌측 상단의 File 메뉴를 누르고 Build Settings를 선택한다.

 

 

그러면 Build Settings창이 뜨게 되는데 

Project창에 있는 STAGE1과 STAGE2 Scene을 클릭후 드래그해서

Scenes In Build창에 집어 넣는다.

 

그럼 위와 같이 변하게 되는데 굳이 하단의 Build 버튼을 눌러지 않아도

해당 내용이 저장되므로 그대로 창을 종료해준다.

 

 

그리고 STAGE2 씬에 들어가 임시로 예시 이미지 하나를 추가해준다.

나중에 STAGE2에서는 예시 이미지처럼 3D 게임이 진행될 예정이다.

 

 

 

3. 결과물

뮤직비디오 구성과 비슷하게 레벨디자인 되었고

화면 끝에 도달하자 페이드 아웃하면서 

다음씬으로 넘어가는 모습을 확인할 수 있다.

 

 

 

드디어 Stage1이 완성되었다.

다음 글에서는 사망처리와 게임오버씬

그리고 랭킹 씬을 구현할 계획이다. 

 

반응형