トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

日本地図を使ったアプリを作りたい!!【Part3完成】アプリ閉じても情報保持

続き

bibinbaleo.hatenablog.com

今回で完成させるぞ!

完成したものがこちらです。

play.google.com

後ろのほうでうんこ実装してるけど気にしないでね。自分用メモ!!!!

プライバシーポリシー

最近GoogleStoreに出す際、内容問わずプライバシーポリシーを記載していないとストアから消されてしまうそうです。

bibinbaleo.hatenablog.com

 

前はリンクを貼りましたが、今回はアプリ内に表示させます。

f:id:bibinbaleo:20190607215051p:plain

 iボタンと×ボタンはペイント3Dで自分で作ることにします。

f:id:bibinbaleo:20190609141424p:plain

白くて見えないと思うけど下にあるので使っていいよ

×

f:id:bibinbaleo:20190609141435p:plain

i

f:id:bibinbaleo:20190609141437p:plain

アプリを閉じても情報保持(PlayerPrefs)

アプリがいったん終了すると、選んだ県の情報も消えてしまうので保持するようにする。

どうやるんだろう~そんなのやったことないな。

korechipostit.hatenablog.com

xml

teratail.com

PlayerPrefsというのを使えばいいらしい

www.sejuku.net

とりあえず勉強のため、ボタンを押した数を保存するものを作ってみた。

ボタンを押したらその回数が保存されるもの。右下の幅広いiがセーブボタンね。

f:id:bibinbaleo:20190609145836p:plain

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class plyerpfa : MonoBehaviour
{
    private int Press = 0;
    public Text text;
    void Start()
    {

       Press = PlayerPrefs.GetInt("PRESS",0);
        text.text = Press.ToString();
    }

    

    public void onPress()
    {
        Press++;
        text.text = Press.ToString();
        Debug.Log(Press);
    }

    public void OnSave()
    {
        PlayerPrefs.SetInt("PRESS", Press);
        PlayerPrefs.Save();
        Debug.Log(Press);
    }

}

 

ゲームが終わるとき

PlayerPrefs.Save (); でセーブされるらしい。

アプリが落ちたら呼ばれる関数あるのかな?

ないならセーブボタン作らないといけない?

調べたらゲームが終わるときに呼ばれるものがあった。

docs.unity3d.com

Editorで動かせばちゃんと動く。

でもちゃんとAndroidだとApplication-Quitを呼んで閉じないと呼ばれないっぽい。

docs.unity3d.compafu-of-duck.hatenablog.com

実際にApplication-Quitを呼ばずにホーム画面戻ってアプリタスク消去で試してみたけど、セーブされなかった。

つまりセーブボタンもしくはアプリ終了ボタンのどちらかは要るみたい。

終了ボタンなんて誰も押さないだろうからセーブボタン作った。

できた!!!!

f:id:bibinbaleo:20190609162542p:plain

消す 

セーブされたデータはメニューから消せるって。

qiita.com

Edit>Clear All PlayerPrefs

やったら消えた!!

実装

とりあえずPlaterPrefsの使い方はわかったところでアプリに組み込む。

フラグ

保持したい情報って、フラグ情報なんだけど、どうすればいいのかな
public void onButton()
{
btnChangeFlag = !btnChangeFlag;
image.color= btnChangeFlag ? btnColor1 : btnColor2;
}
}

 

playerPrefsにはboolを保持する仕組みはなさそう。

かといってboolをintにキャストすることもできないらしい

social.msdn.microsoft.com

boolじゃなくてintでフラグの代わりするか

        if (flg == 0)
        {
            image.color = btnColor2;
            flg = 1;
        }

        else if (flg == 1)
        {
            image.color = btnColor1;
            flg = 0;
        }

これでよい。

あと試してて気づいたけど、start()が呼ばれるときにsaveしてたものをもとに色を変えないといけないんだね。

 void Start()
    {       
       flg = PlayerPrefs.GetInt("TPRESS"+ this.gameObject.name, 0);

        if (flg == 0)
        {
            image.color = btnColor1;  
        }

        else if (flg == 1)
        {
            image.color = btnColor2;
        }
    }

ボタンそれぞれに違う変数

intをフラグの代わりにするのはできたけど、保存するPlayerPrefsの変数の名前が一緒だとすべてが0か1になってしまう。

ボタンを押して色が変わるスクリプトは1種類ですべてのボタンにつけている。

ボタンの名前を変数にいれたらできるかな。

PlayerPrefsの変数に変数?をいれることはできるみたい。

teratail.com

こんなかんじ

flg = PlayerPrefs.GetInt("TPRESS"+ this.gameObject.name, 0);

じゃあ自分のオブジェクトボタンの名前を取ってそれを変数に組み込めばいいなって思ったら・・・

ボタンの名前全部一緒だったーーーーー

ボタンの上のimageの名前はコピペしたら(1)(2)・・・って自動でつくから名前変わるけど、子オブジェクトのbuttonは全部button1っていう名前だった。

 

imageの名前を取ってくる方法もあるのかもしれないけど、ググるのがめんどくさいので47個のボタンの名前をひとつづつ変えることにした(アホ)

f:id:bibinbaleo:20190609162909p:plain

趣味で作ってる時ぐらい効率化とか考えたくない!!!

 

できた!!!!!

ちゃんと保存された!!!Androidでもちゃんと動いた!!!

終わり!

save

ちなみに保存は、都道府県を押したときにするようにしたのでsaveボタン要らないね。

でもあったほう使う人は安心するかな?

いや使う人いないからいいか・・・

一応作った。

f:id:bibinbaleo:20190609170613p:plain

ついでにデザイン変えた。

f:id:bibinbaleo:20190609170629p:plain

 

スマホ用アイコンの大きさって難しいな・・・

ボタンのハイライトって、別のボタン押したら消えるんだね。

GooglePlayConsole

登録しました。

めんどくさいけど1時間もあればできる。

bibinbaleo.hatenablog.com

翌日リジェクトされた。

f:id:bibinbaleo:20190610213004p:plain

一応対象年齢をちょっと変えてもう一度申請したけど、いつ通るかわからないから、もうこの記事公開しちゃう 

bibinbaleo.hatenablog.com

 

公開されました。

play.google.com

最後に

  今回はPlayerptrfsというものを使いました!圧倒的成長!!!!