ここのところ、WebGL(スマホやPCでなく、ブラウザで実行する)のゲームを書いています。Unityでメニューから「Build And Run」を選ぶと、ブラウザでどう見えるのか、試すことができます。一般に、ゲームではハイスコアなどの記録は次回に遊ぶとき参照できるよう、どこかに保存しておかなければなりません。しかし、記録されていないことに気づきました。具体的にはPlayerPrefs.SetInt()という関数を使うのですが、これがうまくいきません。エディタで実行するときは問題ないのに……。結局ぼくの勘違いだったんですがしばらく悩み、あれこれ調べて時間を潰しました。unityroom(ブラウザゲームを登録してユーザーに遊んでもらえるサイト)に試しにアップロードしてそれを実行したところハイスコアがちゃんと保存されました。実際、前に自分が登録したゲームはハイスコアを元気に保存しています。びっくりして古いゲームも見てみたのです。
そもそもブラウザゲームはローカルにファイルを保存できません。そういう仕様です(セキュリティ上の配慮)。でもハイスコアや他の設定情報などは保存できないと困ります。そういうときに使えるのがPlayerPrefsです(もちろんブラウザゲーム以外でも使えます)。ゲームをサーバーにアップロードし、そこで実行すればうまく行くのだ、ということなのでしょう(違っていたら誰か教えてください!)。
これを機会にUnity2022からUnity6に切り替えました。例によって2,3トラブル(ライトを調整する必要があったのと、RigidBodyの設定を一部変えなければならなかった)が発生しましたが、他は特になし。あ、「WebGL」と呼んでいたものが「Web」となるようです。