로비창에 게임 종료 버튼과 팝업을 만들어서 적용시키는중

로비에서만 사용하는 버튼 매니저 스크립트에서 작성했다
Application.Quit() : 게임 종료 함수
유니티 에디터 내에서는 게임이 종료되었는지 확인할 수 없기 때문에, 따로 선언해주어야한다-> 에디터 모드에서 게임을 종료
// 에디터에서 확인용
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#endif


분명 에디터 내에서 OnClick 도 제대로 적용한 상태인데, 팝업창의 버튼이 동작하지 않는다
캔버스가 2개로 나누어져 있어서, 앞에 오는 우선순서 때문에 그런듯하다 Sort Order
Canvas : 버튼 (뒤로가기, 게임종료)
StageCanvas : 스테이지 버튼 (스테이지1, 스테이지1 보조 버튼, 스테이지2, 스테이지2 보조 버튼)
팝업이 현재 캔버스1에 있는 상태
-> 캔버스2에 가려져서 팝업이 클릭되지 않는다
그래서 팝업을 캔버스2로 보냈다
-> 따로 놔두고 sort order를 조정하니까 캔버스1이 앞에오면 스테이지가 안보여지고, 반대로 하면 팝업이 안보여짐

ButtonManager 스크립트 쪽에서 리플레이 누르면 게임 씬 리로드SceneManager.LoadScene("GameScene");
PlayerPrefs 사용?? 할 필요없을지도
할당


timescale이 0이면 멈춰있는 상태기 때문에 1로 설정GameResult 스크립트에서 만약, 게임 클리어 창이 뜰 경우, 잠금 해제 하고싶다
최초로만
PlayerPrefs을 사용하였다 -> 씬을 이동해도 정보가 저장되어있다
제일 하기 싫었던 실수를 해버렸다... C#의 컴파일 순서 ㅠㅠㅠㅠㅠㅠㅠ
스크립트 내에서만 계속 값을 바꾸고 에디터에서 바꾸지 않았다,,,, 에디터를 우선적으로 하기 때문에 계속 currentStage가 0으로 잡혔음
save도 1번째 스테이지가 저장되야함
계속 디버그 찍으면서 확인했다 ,,
StageLock 스크립트ex)
1. 현재 스테이지0
2. 플레이 하고 있는 스테이지1
3. 스테이지1을 클리어하면 PlayPrefs에 스테이지1 저장
4. 스테이지1 이후의 스테이지들은 잠금
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class StageLock : MonoBehaviour
{
[SerializeField] Button[] buttons;
// 현재 스테이지 번호
public int stage = 0;
private void Awake()
{
// 패널의 자식 게임 오브젝트들의 버튼 컴포넌트 가져오기
// 버튼 배열
//buttons = GetComponentsInChildren<Button>();
// 현재 클리어 한 키값 가져오기
stage = PlayerPrefs.GetInt("StageReached");
Debug.Log("Loaded Stage: " + stage); // 로드된 스테이지 값 출력
// 스테이지들의 버튼 컴포넌트 비활성화
for (int i = stage + 1; i < buttons.Length; i++)
{
buttons[i].interactable = false;
}
}
}
GameResult 스크립트 - victory()using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameResult : MonoBehaviour
{
[SerializeField] GameObject ClearPanel;
[SerializeField] GameObject LosePanel;
public int currentstage; // 현재 스테이지 번호
// 첫 셋팅 비활성화
private void Awake()
{
ClearPanel.SetActive(false);
LosePanel.SetActive(false);
currentstage = 1;
}
// 승리 패널이 나왔을 경우, 다음 스테이지 오픈
public void Victory()
{
ClearPanel.SetActive(true);
PlayerPrefs.SetInt("StageReached", currentstage); // 키값과 현재 스테이지 번호 저장
PlayerPrefs.Save(); // 저장된 데이터를 실제 파일에 저장
Debug.Log("Saved Stage: " + currentstage); // 현재 저장된 스테이지 출력
// 다음 스테이지로 증가
currentstage++;
}
public void Lose()
{
LosePanel.SetActive(true);
}
}
PlayPrefs 주의점씬을 이동하거나, 게임을 종료해도 정보가 그대로 저장되어 있다
정보를 계속 저장해둘만한 요소에 사용하면 좋을듯 ex) 점수, 랭킹, 재화
but, 우리 스테이지는 2개 뿐이기 때문에 게임을 종료하면 스테이지가 다시 초기화 되도록 할것이다
-> TitleScene에서 시작할때, PlayPrefs 초기화 진행
TitleScene에서 가장 먼저 실행되는 Awake함수에 정의해둠
Particle SystemTitleScene이 허전한 거 같아서 Particle System을 사용하여 눈 내리는 효과를 만들었다
참고 : 눈내리는 효과 - 파티클 시스템 https://learnandcreate.tistory.com/2648

파티클 시스템은 기본적으로 3D지만, 우리는 2D기 때문에 임의로 조정해야한다
나는 카메라를 조정하여 눈내리는 곳에 카메라를 맞췄다

그리고 현재 카메라가 UI와 파티클 시스템을 동시에 보기 하기 위해서 캔버스에 메인 카메라 할당
