HTML5でのセーブデータの扱い・その2 他のゲームとの区別方法
「HTML5のセーブデータの扱いなんだけど、別のゲームとの区別はどうなってるんだろう、と思ってちょっと調べてみた」
妹「他のゲームとの区別?」
「例えば、妹のゲームと兄のゲームをHTML5パッケージ化して、同じホームページに置いたとする。妹のゲームで出した点数が、なぜか兄のゲームでもハイスコアとして出てきちゃう……なんてことが起きるんじゃないか? ってこと」
妹「そんなことが起きたら駄目なのでは」
「そうなんだけど、調査の結果、それが起こる可能性はあるということがわかった」
妹「えー……」
「まずホームページのドメインが違えばセーブデータも別になるらしいことがわかった。ドメインというのはアドレスの最初の方の、www.example.netみたいな部分。ここが同じだと、セーブデータも同じになる。これはUE4じゃなくてHTML5のlocalStorageというシステムの仕様」
妹「じゃあ例えば同じブログだったら、別々のページでも同じとこに保存されるということ?」
「そういうことになる。今つかってる、はてなブログは各ブログでドメイン違うようになってる。ドメイン名が同じになってるサービスだと、他の人が作ったゲームのセーブデータとも干渉する可能性がある。最近はあんまりないけど、プロバイダで用意されたホームページ領域はそんな感じのことが多い」
妹「でも結局、同じブログに2つゲームがあると駄目なんだよね?」
「その点は、セーブする時の名前を変えれば大丈夫になる。例えば昨日試してたタッピーチキン、あれはTappySlot2という名前でセーブスロットが作ってある。ここが一緒だとプロジェクト名を変えようが、プロジェクトIDを変えようが、同じデータを読み込んでしまった」
「そこでこういう感じに、セーブスロット名を別の名前にすることで回避が出来た」
妹「それはまあ、別のセーブスロットなんだからそうなるだろうけど……」
「これはプロジェクトIDかなにかで分けた方が安全だと思うんだけど、今出来る方法としてはゲーム毎に違うスロット名を付けるように気をつけるしかなさそう」
妹「save1、save2とか適当につけるとよくなさそう」
「大幅アップデートする時は、この仕組みを利用して古いデータをなかったことにするのがよさそう。あと同じサイトにあるゲーム同士で、ポイントみたいなのを共通化することもできそう。もっとも遊びレベルの話で、課金してとか本気でやるならデータはネットワーク経由できちんと保存しないと駄目だけど」
妹「これHTML5じゃなかったら別にいいんだよね? 他のゲームとスロット名がかぶったりしてても」
「それは大丈夫なはず。ホームページ上でゲームを動かすっていう仕組みの都合上の話だから」