【Unity基礎】ハイスコアをセーブ・ロードできる!PlayerPrefsの使い方

Sponsored Link


Unityでゲームのデータをセーブ、ロードしたくなった!

どうも、Linです。牛皿小鉢、一丁。

 

Unityでゲームを制作しているとたまに、

ハイスコアなどのデータをセーブして保存して、ロードしたい・・・

という欲求が生まれる時があるでしょう。

そんな時に便利なのが、

PlayerPrefs

という仕組みです。

 

PlayerPrefsとは簡単に言ってしまうと、

利用しているOSのとある場所にUnityゲームのデータを保存して読み込める機能

のことで、Unityのゲームではハイスコアの記録や、ゲームデータを途中でセーブする時に用いられているものです。たとえば、Android OSの場合、

/data/data/pkg-name/shared_prefs/pkg-name.xml.

という場所にUnityデータが保存されるようになっているみたいですね。

>>詳しくは公式レファレンス参照

 

今日はこのUnityゲーム制作を通してPlayerPrefsの使い方をマスターしたので、PlayerPrefsを使ってゲームデータを保存、そしてロード、最終的にいらなくなったら削除する方法までまとめておきました。

  1. データを保存する方法
  2. データをロードする方法
  3. データを削除する方法

 

この記事ではデモとして、

SAVEボタンを押すと現在時刻が保存され、LOADを押すと保存したデータが読み込まれ、DELETEでデータを削除する

というシンプルなアプリを作っていきますよ〜

unity playerprefs 使い方

 

なお執筆にあたり「Unityの寺子屋」という書籍を参考にさせてもらいました。

 

 

 

UnityのPlayerPrefsでデータをセーブする方法

まずPlayerPrefsでデータをセーブする方法から見ていきましょう。

データをセーブする時は、

PlayerPrefs.Set+保存する変数の型(文字列のキー, 保存したい値)

と記述していきます。ここの第一引数の「文字列のキー」とはセーブデータを取り出す時に必要になってくるカギみたいなもので後々使うことになりますよ。

なお、保存する変数の型の種類は、

  1. String
  2. Int
  3. Float

の3種類です。

 

ちょっとわかりづらいので例を出すと、たとえば、String型の変数Mojiを、MOJIMOJIというキーで保存したい場合は、

PlayerPrefs.SetString(“MOJIMOJI”, Moji);

となるわけですね。

 

さて、現在時刻を文字列型の変数で保存したいサンプルアプリの場合、SaveDataというデータ保存用の関数を定義しました。こいつをSAVEボタンを押したら呼び出すように設定していきます。

NOWというキーでnowTimeというString型の変数を保存しているのですね。

最後の、

PlayerPrefs.Save();

はセットした値を保存するメソッドになりますね。これでデータのセーブは完了です!

 

 

UnityのPlayerPrefsでデータをロードする方法

続いては保存したデータをロードして変数に代入したり表示したりしていきましょう。

PlayerPrefsでデータをロードしたい時は、

PlayerPrefs.Get+ロードする変数型(“文字列のキー”, デフォルト値)

で呼び出していきますよ。第一引数の「文字列のキー」とは先ほど保存した時に使ったキーのことで、デフォルト値は万が一データが保存されなかった時に表示する値ですね。このデフォルト値の変数型はロードする変数型と一致させないとエラーが出てしまうので要注意。

たとえば、MOJIMOJIというキーで保存したString型の変数をロードしたい場合は、

PlayerPrefs.GetString(“MOJIMOJI”, “”);

となりますね。デフォルト値をからの文字列””に設定しました。

 

今回のサンプルアプリでは、LoadDataというセーブデータをロードするための関数を定義。

NOWという文字列のキーでデータをロードし、もしもの時のデフォルト値は空の文字列に設定。そして、こいつをtimeTextのtext属性に代入してロードと同時に画面に表示するようにしました。

この関数をLOADボタンを押した時に呼び出すようにUnityで設定していきますよ。

 

 

UnityのPlayerPrefsでデータを削除する方法

データをセーブ、ロードする方法はわかりました。

がしかし、時と場合によっては、

一回保存したデータを削除してなかったことにしたい

という場合があるでしょう。

気がきくことにUnityのPlayerPrefsではデータを削除するためのメソッドが用意されており、それがこの2つ↓

  1. DeleteAll();
  2. DeleteKey(キーの文字列)

1つ目のDeleteAllを発動してやればこれまでPlayerPrefsで保存してきたデータがすべて削除できますし、DeleteKeyでは引数に設定したキーのデータのみを消し去ることができます。

たとえば、MOJIMOJIというキーのデータを削除したい場合は、

PlayerPrefs.DeleteKey(”MOJIMOJI”)

としてやればいいのですね。

 

サンプルアプリでは面倒際のでDeleteAllメソッドで全て削除する関数「DeleteData」を作っておきました。

こいつをDeleteボタンに紐付けて準備完了です。

 

 

 

さあ、UnityのPlayerPrefsを使ってみよう!

以上がUnityのPlayerPrefsでデータをセーブ、ロード、削除方法でした。

 

サンプルアプリでは最終的に「GameController.cs」というスクリプトを用意し、

そいつを空のオブジェクトGameControllerにアタッチして、各ボタンにそれぞれ関数を紐付けてみました。

unity playerprefs 使い方

すると、SAVEボタンを押すとデータ保存、LOADを押すと、データをロードしてテキストに表示、さらにDELETEキーをおすとデータが消えてしまい、ロードしても何も出てこない、という結果になりました。
Image from Gyazo

また、PlayerPrefsで保存したデータは、一度ゲームをやめてもセーブされたままなので失われずに再び呼び出すことができます。
Image from Gyazo
UnityのPlayerPrefsの使い方をマスターすると、ゲームにベストスコアを記録したり、ゲームデータを保存したりゲームの幅が広がりますのでガンガン使っていきましょう。

よかったら参考書籍「Unityの寺子屋」も読んでみてくださいね。

それでは!
Lin

飯橋凛(Ihashi Lin)

インターネット広告代理店を1年半で退職。
その後、副業として活動していたウェブメディア運営のフリーランスへ。
現在はプログラミングの勉強に励み、0からフリーエンジニアの道を目指す。最近はキムチをまとめ買いにはまっている。


Sponsored Link

コメントはこちらからお願いします!



もう1本読んでみる