Devil Toast/Cat Like Coding

21.07.09 - 유효하지 않은 숫자/레벨 거르기 + etc

nd-F 2021. 7. 9. 16:43

해당 글은 아래 Cat Like Coding 튜토리얼을 참조했습니다만

읽지 않아도 크게 관계는 없습니다

 

https://catlikecoding.com/unity/tutorials/object-management/multiple-scenes/

 

Multiple Scenes

A Unity Object Management tutorial about working with multiple scenes.

catlikecoding.com

 

사실 이 튜토리얼은 아무리 생각해도 첫 강의에 Save/Load 구조를 미리 만들어두는게 너무 신기합니다.

진짜 신기한 것들 투성이에요.

 

아무튼 오늘은 거의 막바지라서 간단한 것 하나만 하고 갑시다.

 

1, for문으로 숫자 거르기

이 예제의 경우 간단한 레벨(씬)을 생성하고, 숫자키 입력을 통해 이를 호출합니다.

1을 입력하면, "Level "이라는 string 뒤에 "1"을 붙어서 "Level 1"이라는 이름의 씬을 로드하죠.

 

그런데 만약 2개의 레벨까지만 생성했는데, 누군가가 3 이상의 값을 입력하면 어떨까요?

 

지금까지는 그냥 switch로 default를 하거나, if문을 촤라락 하거나, while의 조건문으로 판단을 했습니다만

이번 예제에서는 for문으로 거르더라고요?

 

일단 기본적으로 '몇 개의 레벨까지 만들었는가?'에 대한 멤버 변수를 필요로 합니다.

public으로 해서 inspector 상에서 입력할 수 있도록 해줍니다. (앞에서 말한 경우라면, 2값이 되겠죠)

 

그리고 이 levelCount로 다음 for문을 작성합니다.

 

for(int i=1; i<=levelCount; i++) { ... }

 

여기까지만 보면 '굳이?'라는 생각이 들겠지만, 이 내부에서 Input을 받습니다.

 

for(int i=1; i<=levelCount; i++)

{

      if(Input.GetKeyDown(KeyCode.Alpha0 + i) { ... }

}

 

기본적으로는 '각 숫자 키'에 대해서 별도로 코드를 작성해야 하겠지만

이렇게 하면 Alpha0 값을 기준, 일괄적으로 값을 받아낼 수 있습니다.

 

즉, 해당 Get Key Down은 level Count==2 이기 때문에

0 + 1

0 + 2

이렇게 두 개의 값에 대한 입력에만 반응을 하는 식입니다.

 

2, Save / Load

이건 쉽게 정리는 안되겠지만,

해당 튜토리얼의 초반 핵심 중 하나는 '간편하게 세이브와 로드를 수행'입니다.

 

https://catlikecoding.com/unity/tutorials/object-management/persisting-objects/

 

Persisting Objects

A Unity Object Management tutorial about persisting object data between game sessions.

catlikecoding.com

 

당연히 UX적인 관점에서 하는 이야기가 아니라

새로운 정보를 저장해야 할 때 프로그램 수정이 용이해진다는 의미죠.

 

 

사실 저도 잘 모르겠습니다.

하지만 일단 정리를 하자면

 

기본적으로는 Binary Reader/Writer 쪽 메소드를 이용해서 기록합니다.

하지만 매번 데이터가 새로 생길 때 마다 한줄씩 추가할 수는 없으니

'인자로 받은 데이터에 대해 Binary 메소드로 기록하는' 사용자 지정 메소드 및 클래스를 만들어줍니다.

그게 여기서 Game Data Reader/Writer .cs가 되는 것이고요.

 

그래서 결론만 보면

Game. cs는 Save/Load라는 사용자 지정 메소드(정확히는 Persistalbe Object에서 오버라이딩 합니다)에게 원하는 데이터 정보를 넘겨줍니다.

그러면 Persistable Storage쪽 메소드가 세이브 및 로드에 대한 메소드를 호출합니다.

 

때문에 이후에 새로운 정보를 추가하게 되면

(1) 버전 넘버링을 비교 후 처리 (프로그램 버전과 메타 데이터 버전이 맞지 않으면 디폴트 처리를 따로 지정합니다)

(2) 새로운 정보를 기록하기 위해 Game. cs에 한 줄 추가만 하면 끝

 

이렇게 간결하게 프로그램 확장이 가능해집니다.

 

다만.... 저보고 응용하라고 하면 머리 터질 것 같네요.

일단 7월말까지 지금 하는 예제 묶음 다 끝나면 다시 할 생각입니다. 아리송...

 

--