이경로 2023. 4. 21. 06:36

목차

1. PlayerPrefs란?

2. 사용 방법

3. 주의사항

 

1. PlayerPrefs란?

PlayerPrefs란, 데이터를 저장하고 불러올 때 사용이 가능한 클래스이다. 전역 변수와 역할이 유사하지만, PlayerPrefs는 실행을 종료해도 데이터가 사라지지 않는다. PlayerPrefs는 프로젝트 전체에서 사용하기 위해 사용하거나, 플레이 기록처럼 실행을 종료하더라도 저장되어야 하는 데이터를 보관하기 위해 사용한다.

 

 

2. 사용 방법

PlayerPrefs의 형태는 PlayerPrefs.SetInt("변수명", 값), PlayerPrefs.GetInt("변수명")가 존재한다. int 이외에도 float, string도 사용이 가능하다.

 

위 화면은 필자가 제작 중인 게임의시작 버튼을 클릭하면 맨 처음 등장하는 화면이다. 레벨은 1이다.

 

사냥을 통해 3레벨까지 레벨업을 하였다. 

 

해당 코드는 게임 내에서 경험치를 획득하기 위한 함수이다. GetInt를 사용해 현재 레벨과 경험치 값을 불러온 뒤, 현재 경험치가 요구량 이상이 되면 SetInt를 사용해 레벨을 증가시키고 경험치를 초기화한다.

 

캐릭터의 레벨이 정상적으로 로드되는 모습을 알 수 있다.

(사이트에 배포된 게임은 테스트용으로 게임을 실행할 때마다 모든 정보가 초기화된다.)

 

3. 주의사항

 

PlayerPrefs에는 위에서 서술했다시피 변수명이 존재한다. 따라서 타입이 다르더라도, 변수명이 동일하면 PlayerPrefs가 제대로 동작하지 않는다.

 

오늘 수정한 대시 키 설정 버그가 발생한 원인이다. int타입의 DASH는 대시 레벨을 의미하고 string타입은 대시의 단축키를 의미한다. 타입이 다르지만 이름이 같은 변수가 두 개 존재하게 되고, 에러가 발생했다.

대시 스킬을 찍기 전에는 문제가 발생하지 않지만, 스킬을 찍게 되면 int타입의 DASH를 PlayerPrefs에 저장하게 되고, 추후에 옵션 창에서 string타입을 호출하면 에러가 발생하게 된다.

 

해결 방법은 간단하다.

PlayerPrefs가 아니라 일반 변수였다면 이름을 똑같이 지을 생각 자체를 하지 않았겠지만, 특수한 클래스를 사용하다 보니 별 생각 없이 동일한 이름을 선언해 발생한 문제이다. 이 글을 보는 개발자들은 이런 간단한 실수로 인해 시간을 낭비하지 않길 바라며 글을 작성했다.