Unity 게임에서 플레이어의 진행 상황 저장


22

Unity 게임 엔진을 사용하여 게임을 만들고 있습니다. 레벨, 경험치, 선택한 캐릭터 등 플레이어의 진행 상황을 저장하고 싶습니다. 현재 playerprefs를 사용 하고 있지만이 게임이 모바일 장치 (Android / iOS)에서 실행되는 게이머에게도 효과가 있는지 알고 싶습니다. 데스크톱으로 (OSX / PC)? 그렇지 않은 경우이 정보를 어떻게 저장해야합니까? 각 단계를 지운 후 플레이어 진행 상황을 자동 저장하고 싶습니다.

답변:


30

PlayerPrefs는 크로스 플랫폼에서 작동하지만 안전하지 않기 때문에 게임 플레이 진행률 저장 파일 에는 권장 되지 않습니다 . 일반 텍스트 파일 인 플레이어는 파일을 쉽게 열고 내용을 변경하여 부정 행위를하거나 게임을 예측할 수 없게 만들 수 있습니다. 또한 머무르는 것이 보장되지는 않습니다.

PlayerPrefs 는 컨트롤 매핑 또는 음악 / sfx 설정과 같은 필수적이지 않은 환경 설정 정보를 위해 고안되었습니다. 플레이어는 자유롭게 변경할 수 있으며 시스템 복원 지점을 사용하고 잃어버린 경우에는 절대 놓치지 않을 것입니다. 일부 레지스트리 정보. 이로 인해 높은 점수를 얻지 못하거나 캠페인 진행률이 떨어지면 플레이어는 당황 할 것입니다!

대신 게임 플레이 진행률을 자신의 파일에 저장하는 것이 좋습니다 (일반적으로 바이너리, 수정하거나 수정하기를 원하는 경우 암호화 또는 서명 가능하지만 아래에서 Philipp의 설명 참조).

Application.persistentDataPath 를 사용 하여 각 플랫폼에서 안정적인 저장 위치를 ​​얻을 수 있습니다 . 이는 일반적으로 위의 예와 같이 삭제되지 않는 사용자 데이터 폴더에 있습니다.

저장할 경로가 있으면 일반 C # IO 메서드를 사용하여 파일을 만들고 쓰고 읽을 수 있습니다. 세부 사항은 저장 파일 형식 및 구조에 따라 크게 달라 지므로 문제가 발생하면 수행하려는 작업과 문제가 발생한 위치에 대해 새 질문을하는 것이 가장 좋습니다.


30
내 생각에, savegame 파일을 암호화하고 서명하는 것은 뱀 일뿐입니다. 숙련 된 해커가 액세스 할 수있는 키와 알고리즘을 게임 실행 파일에 저장해야하기 때문에 안전하지 않습니다. 또한 무의미합니다. 싱글 플레이어 게임 인 경우 왜 귀찮게합니까? 플레이어가 원하는 방식으로 게임을 즐길 수있게하십시오. 멀티 플레이어 게임 인 경우 조작이 안전한 서버에 모든 것을 저장해야합니다.
Philipp

5
@ SamedTarıkÇETİN 데이터 경로 (게임이 설치된 위치)와 영구 데이터 경로 (새로운 데이터를 저장하기위한 안정적인 위치 ) 사이에는 중요한 차이점이 있습니다 . 일부 플랫폼에서는 빌드 된 게임이 설치된 데이터 경로에 쓸 수 없으므로 일반적인 데이터 경로 위치에 저장하는 것이 좋습니다.
DMGregory

2
@Philipp에 동의하지만 클라이언트 측 스토리지는 절대 안전하지 않으며 대부분의 경우 싱글 플레이어 게임 보안에 신경 쓸 필요가 없지만 적용 할 보안 또는 난독 화의 양은 궁극적으로 선택입니다 각 제작자는 스스로 만들어야합니다. 이 답변을 사용하면 게임에 적합한 정보를 선택하기 위해 정보를 제공 할 수 있습니다.
DMGregory

1
한편으로는 @Philipp에 동의하지만 텍스트 편집기에서 작업하기가 완전히 불가능한 직렬 저장 파일을 보거나 작업했습니다. 예, 아마도 들어가서 약간의 변경을하는 방법을 알아낼 수 있었을 것입니다. 그러나 파일이 2 megs의 원시 16 진수처럼 보였을 때 알아내는 것이 꽤 번거로운 일이었습니다. 이 경우 대부분의 사람들은 그것을 분해하려고 시도하고 결과는 게임의 특정 시점에 따라 다릅니다 (저장에 하나 이상의 유닛을 추가하면 모든 후속 데이터가 다운 스트림에 푸시됩니다). 그럼 다시, 그것은되지 않은 목적으로 안전 할 수 있습니다.
Draco18s

2
PlayerPrefs에 저장하지 않음으로써 @ShantanuSingh. 이러한 종류의 정보는 원격 데이터베이스에 저장하고 앱 시작시 요청해야합니다. 인터넷 연결을 사용할 수없는 경우 호환성을 위해 로컬 보안 저장 파일 (암호화)로 대체하십시오. 사용 가능한 경우 데이터베이스 값이 로컬 값을 덮어 써야합니다. 다른 방식으로도 사물을 처리하는 인앱 구매 플러그인이있을 수 있지만 "인터넷 필요", 해킹 가능 (암호화 파일은 100 % 안전하지 않음) 또는이 주석 세부 정보 일 수 있습니다.
Draco18s


-1

PlayerPrefs는 어떤 플랫폼을 구축하든 "작동"하도록 설계된 K / V 스토어입니다. 설득력없는 이유가 없다면 계속 사용하십시오.


PlayerPrefs를 사용하지 말아야 할 강력한 이유 가 있다면 그 질문은 꽤 많이 있다고 생각합니다 (예, 있습니다). 따라서 나는이 답변을 질문에 답하지 않기 때문에 downvoted.
Peter-Unban Robert Harvey

-1

가장 좋은 방법은 서버 측 절약입니까? 필요한 모든 저장 정보를 json 문자열로 변환하고 mysql 서버에 문자열 데이터로 저장하고로드 할 때 서버에 연결하고 복원해야합니까?


4
이것은 질문에 대한 답변이 아닙니다. 질문이 있으시면 새로운 질문으로 질문하십시오 .
Sourav Paul
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.