안 쓰던 블로그
unity 스테이지 Lock 구현하기 본문
[구현 해야 할 것]
처음에는 1번 스테이지만 열려있고 나머지는 누를 수 없게 처리
1번을 깨면 2번이 열리고, 2번을 깨면 3번이 열리게
2번을 깨고 스테이지 선택창으로 나가면 3번이 열려있어야 함
끝까지 다 깨고 나면 다시 잠기면 안 됨
일단 스테이지 버튼 구조
버튼 컴포넌트를 붙인 게임오브젝트 Prefab로 만들어서 복사했다
스크립트는 버튼들을 가진 부모 Content를 먼저 가져와서
GetComponentsInChildren<Button>으로 모든 자식들의 버튼 컴포넌트를 뗀다
그리고 현재까지 오픈된 스테이지 번호+1부터 끝까지 버튼을 막게 했다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class LevelLock : MonoBehaviour
{
int levelat; //현재 스테이지 번호, 오픈한 스테이지 번호
public GameObject stageNumObject;
void Start()
{
Button[] stages = stageNumObject.GetComponentsInChildren<Button>();
levelat = PlayerPrefs.GetInt("levelReached");
print(levelat);
for (int i = levelat + 1; i < stages.Length; i++)
{
stages[i].interactable = false;
}
}
}
현재까지 오픈된 스테이지 번호를 어떻게 저장할까 고민하다가 PlayerPrefs에다가 저장하기로 했다
PlayerPrefs는 Key-Value 형식으로 데이터를 로컬에 저장한다
int, float, string 타입의 데이터만 가능하다고 알고 있음
----
PlayerPrefs.SetInt("키 이름", 저장할 값); //키에다가 값을 저장
PlayerPrefs.GetInt("키 이름"); //키값을 가져옴
PlayerPrefs.SetFloat, Setstring / PlayerPrefs.GetFloat, Getstring 도 있다
PlayerPrefs.DeleteKey("키 이름"); //값 삭제
PlayerPrefs.DeleteAll(); //모든 데이터 삭제
PlayerPrefs.HasKey("키 이름"); 키값이 존재하면 참
----
이 스크립트에서 GetInt를 했으니까 어딘가에서는 SetInt를 해줘야 한다
SetInt는 게임매니저에서 했다
//...
if (X.activeSelf == true)
{
X.SetActive(false);
}
else
{
O.SetActive(false);
nowStage += 1; //맞으면 다음 스테이지로 자동 이동
PlayerPrefs.SetInt("levelReached", nowStage); //현재 스테이지를 깨면 스테이지락 해제
if (nowStage == data.Count) //만약 마지막 스테이지라면 스테이지 선택 창으로 돌아감
{
ButtonManager.onClick();
}
else this.q(); //그렇지 않다면 다음 스테이지로
}
//...
정답이면 현재 스테이지값+1을 해서 다음 스테이지로 가게 했는데,
현재 스테이지+1한 값을 PlayerPrefs.SetInt로 저장했다
그러면 만약 다음 스테이지를 안 풀고 스테이지 창으로 돌아가도 안 푼 스테이지 부분은 Lock이 풀려있게 된다
'유니티 > 개발' 카테고리의 다른 글
유니티 TTS(Text-To-Speech)간단하게 구현하기(google web tts api/WWW 클래스 사용) (2) | 2020.03.12 |
---|---|
유니티 출시 오류-이 출시 버전은 Google Play 64비트 요구 사항을 준수하지 않습니다 해결방법 (0) | 2020.03.02 |
unity 씬이 바뀌어도 배경음악 반복 재생/정지/일시정지 (2) | 2020.03.02 |
unity 안드로이드 빌드 후 csv파일 못 불러오는 에러 해결 방법( StreamReader, Application.dataPath 에러) (2) | 2020.02.29 |
unity 안드로이드 빌드 후에 에러 로그 보는 방법(adb사용) (0) | 2020.02.29 |