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

Sponsored Link


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

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

 

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

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

という時があるでしょう。

そんな時に便利なのが、

PlayerPrefs

という仕組みです。

 

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

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

のこと。

Unityのゲームではハイスコアの記録や、ゲームデータを途中でセーブする時に用いられているものです。

たとえば、Android OSの場合、

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

という場所に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というキーで保存したい場合は、

となるわけですね。

 

さて、サンプルアプリを作っていきましょう。

現在時刻を文字列型の変数で保存したいので、SaveDataというデータ保存用の関数を定義しました。

こいつをSAVEボタンを押したら呼び出すように設定していきます。

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

最後の、

PlayerPrefs.Save();

はセットした値を保存するメソッドになりますね。

これでデータのセーブは完了です!

 

 

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

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

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

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

で呼び出していきますよ。

 

第一引数の「文字列のキー」とは保存した時に使ったキーのことで、デフォルト値は万が一データが保存されなかった時に表示する値ですね。

このデフォルト値の変数型はロードする変数型と一致させないとエラーが出てしまうので要注意。

 

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

となりますね。

デフォルト値をカラの文字列「””」に設定しました。

 

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

NOWという文字列のキーでデータをロードし、もしもの時のデフォルト値はカラの文字列に設定しました。

そして、こいつをtimeTextのtext属性に代入して、ロードと同時に画面に表示するようにしました。

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

 

 

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

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

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

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

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

 

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

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

 

1つ目のDeleteAllを発動してやればこれまで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本読んでみる