ロバメモ - 素人のUnity覚書と奮闘記

素人のUnity覚書と奮闘記

PlayerPrefsを使ったWebGLをphpに置いた時に生じた不具合と回避策

サイトの仕組み

私のサイトはphpで作成している。
といっても、高度なことはできなくて、ただヘッダー・フッター・メニューなどを分けて読み込むだけの単純なもの。

<div id="right_container">
    <?php

        if(isset($_GET["page"])){
            require $_GET["page"];
        }

    ?>
</div>

//サイト内リンク
<a href="?page=hoge.php">Hoge Page</a>

index.phpを起点にバラバラにされたページを読み込んでいく。
おそらく、これが原因だろうと思う不具合が生じたのでメモしておく。

生じた不具合

PlayerPrefsを使ったWebGLのゲームを2本作成して、それぞれのページを作成して、サーバーにアップしたところ、 セーブデータが混合されるという不具合が生じた。
ゲームページのphpをフォルダ分けしても、混合されていた。

ゲーム1・ゲーム2共にセーブデータが無い状況で、ゲーム1を途中までやってセーブし、その後、ゲーム2を開くとセーブデータが無いはずなのに何かを読み込んでいた。
おそらく、先にやったゲーム1のデータのようだった。
逆の手順でも同じことが起きた。

競合する変数名があるのも問題だったのかもしれない。
しかし、読み込むファイルが同じになるのはなぜ?
そもそも、どういう風にセーブデータファイルが作成されているのだろうか?

セーブデータファイルが作成される場所

docs.unity3d.com

unityのバージョン・OSによって、保管場所が異なるみたい。

ライブラリ > Preferences > unity.[company name].[product name].plist  

ここには、それぞれのプロダクト名でファイルが作成されていた。
ちゃんと、2つあるではないか!

回避策

深まる謎。実は、謎は今も解けていないのだが、回避する方法は見つけた。
(1)htmlにする。
(2)プロジェクトごとにフォルダ分けをして、ゲームページもそのフォルダに入れる。

なんとも、逃げな感じがするが、とりあえず回避できた。
未だに、シンプルなテキストエディタでゴリゴリ書いてる私にとっては、html縛りがあるのは痛い。

以上。