Unity
Unity Scene 불러오는 법 SceneManager.GetActiveScene()
박도치
2023. 11. 1. 20:56
Unity에서 자신의 신을 불러와야 하는 경우가 있다. 필자의 경우 카드 뒤집기 미니게임프로젝트 중 StrartScene에서 Easy모드 normal모드 Hard모드 세 가지 Scene을 사용하는데 게임이 끝나고 다시하기를 눌렀을 때 지금 진행하는 Scene을 띄우기 위해 Scene이름을 불러오는 코드를 사용했다.
using UnityEngine.SceneManagement;
Scene scene;
private void Awake()
{
scene = SceneManager.GetActiveScene();
}
public void RetryGame()
{
SceneManager.LoadScene(scene.name);
}
해당 코드를 통해 retry 시에 현재 진행하고있는 씬을 로드하게끔 할 수 있다.
1. 응용
게임 종료시 만약 easy모드이면 easy모드의 이번점수와 최고점수를 return해주고, normal이면 normal 등 난도별로 점수가 나뉘어져 있을거다. 이 때도 마찬가지로 Scene의 이름을 가져와서 사용할 수 있다.
void GameEnd()
{
//Scene name 불러오는 함수
string sceneName = scene.name;
isRunning = false;
trialText.text = trialNum.ToString() + "회";
warningBackground.gameObject.SetActive(false);
Time.timeScale = 0f;
//끝날 때 점수띄우는 Panel setActive
endPanel.SetActive(true);
if (time > maxTime)
time = maxTime;
thisScoreText.text = time.ToString("N2");
/*하드 게임 플레이시 최고점수 및 현재점수 기록*/
if (sceneName == "HardScene")
{
GameHardScore();
}
/*헬 게임 플레이시 최고점수 및 현재점수 기록*/
else if (sceneName == "HellScene")
{
GameHellScore();
}
else
{
GameNormalScore();
}
}
위 코드를 보면 아래 하드게임 플레이시 HardScore 함수를 호출하고, 헬게임 플레이시 HellScore함수를 호출하는 방식이다. 이런식으로 필요할 때 Scene의 이름을 가져와서 활용할 수 있다.
Score함수는 아래와 같다.
void GameHardScore()
{
string sceneName = scene.name;
string bestscore = "hardscore";
if (sceneName == "HardScene")
{
//endTxt.SetActive(true);
if (time >= maxTime)
{
audioSource.PlayOneShot(lowscoreSound);
}
else if (PlayerPrefs.HasKey(bestscore) == false)
{
// 게임종료시 베스트 스코어면 나오는 노래
audioSource.PlayOneShot(bestscoreSound);
PlayerPrefs.SetFloat(bestscore, time);
}
else if (time < PlayerPrefs.GetFloat(bestscore))
{
// 게임종료시 베스트 스코어보다 낮으면 나오는 노래
audioSource.PlayOneShot(bestscoreSound);
PlayerPrefs.SetFloat(bestscore, time);
}
else
{
// 게임종료시 베스트 스코어보다 낮으면 나오는 노래
audioSource.PlayOneShot(lowscoreSound);
}
float maxScore = PlayerPrefs.GetFloat(bestscore);
maxScoreText.text = maxScore.ToString("N2");
EndGameBgmStop();
}
}