Unity Script(공통)

Unity Senario Manager(C#스크립트)

뽐타 2022. 9. 16. 13:52

Senario Manager.CS 핵심 코드 (모든 스크립트를 모아 관리해주는 역할)

전체 스크립트

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

public class ScenarioManager : MonoBehaviour
{
    // 시나리오 관리를 위한 변수 선언
    private SoundManager SoundM; //SoundManager 연결
    public SceneChanger SceneC;  //SceneChanger 연결
    public UIManager uim;        //UIManager 연결

    private float play_speed = 1f; //시연 속도 조절
    

    public enum ScenarioSteps //Enum으로 챕터 관리 변수 생성
    {
        /* 메인화면 */
        Chapter_main_start,

        /*챕터 1-1 */
        Chapter1_start, //챕터1 시작

        /*챕터 1-2 */
        Chapter1_step2_1_start
    }

    void Start()
    {
        DontDestroyOnLoad(this.gameObject); //씬 이동 시 사라지지 않게 하는 기능
    }

    //코루틴 시작 호출
    public void StartScenario()
    {
        StartCoroutine("Chapter_main_start");
    }

    // 코루틴 선언
    IEnumerator Chapter_main_start()
    {
        yield return new WaitForSeconds(5.0f * play_speed); //Scene 시작전 대기 5초, 위에서 선언한 play_speed라는 변수로 시연 속도 조절 가능
        StartCoroutine("Chapter1_start");
        
        /*
        while() //사용자가 임무를 수행할 때까지 반복시키는 코드
        {
            yield return null;
        }
        */
    }
}

 

세부파트 스크립트 설명

public enum ScenarioSteps //Enum으로 챕터 관리 변수 생성
    {
        /* 메인화면 */
        Chapter_main_start,

        /*챕터 1-1 */
        Chapter1_start, //챕터1 시작

        /*챕터 1-2 */
        Chapter1_step2_1_start
    }

1. Enum으로 각각 시나리오의 변수를 선언해주는 이유는 시나리오가 복잡해질 때, 원인을 바로 체크하기 위함이다. 다수의 코수틴이 생기기 때문에 Debug.Log(Enum.변수)로 추적이 가능하다.

 

public bool IsPassed = false;

// 코루틴 선언
IEnumerator Chapter_main_start()
{
    yield return new WaitForSeconds(5.0f * play_speed); //Scene 시작전 대기 5초, 위에서 선언한 play_speed라는 변수로 시연 속도 조절 가능        
        
   // IsPassed = true일 때 넘어간다.
   while(!IsPassed) //사용자가 임무를 수행할 때까지 반복시키는 코드
   {
      yield return null;
   }
        
   StartCoroutine("Chapter1_start");
   }
    
    
IEnumerator Chapter1_start()
{
   yield return new WaitForSeconds(5.0f * play_speed); //Scene 시작전 대기 5초, 위에서 선언한 play_speed라는 변수로 시연 속도 조절 가능
   StartCoroutine("Chapter1_start");
        
   IsPassed = false; //앞에서 IsPassed를 true로 해줬기때문에 해당 코드를 작성하지 않으면 그냥 넘어간다.
   while(!IsPassed) //Ispassed가 true일때까지 반복
   {
      yield return null;
   }
        
 }

2. IsPassed는 다른 스크립트를 참조해서 시나리오가 넘어가도록 도움을 주는 Bool타입 변수이다.  While반복문을 한번 거친 IsPassed는 true로 변경해줘야 다음 반복문이 넘겨지지 않고 기능을 수행할 수 있다.