FreelyApps

個人によるアプリ開発の日記です。アプリの収入だけで生活できるようになるのが目標です。UnityでAndroid向けのゲームアプリを作成しています。


    ブログを
    https://freelyapps.net/
    に移転する予定です。
    リンク切れがある記事はこちらに移動した可能性もあります。

    タグ:Windows

      このエントリーをはてなブックマークに追加 Clip to Evernote
    PlayerPrefsを使うとセーブが作れます。当然プラットフォームによらないので、一度コードを書けばAndroid/iOSはもちろんPC上でもセーブがされています。私はWindowsで開発をしているので今日はその問題について書こうと思います。

    セーブがどこに保存されているかというとWindowsではレジストリになります。レジストリはプログラムが設定情報などを書き込むデータの保存場所です。PlayerPrefsを使うと、このレジストリにセーブが保存されるというのはあまり良くありません。データの保存場所なのだからそこに保存することは自然に見えるのですが、大きな問題はセーブ内容を直接見れることと、編集できてしまうことです。特に編集できてしまうのが悪影響を与えます。範囲外のデータが保存されるとプログラムがおかしくなるというのはよくあることです。
    開発中はセーブを自由にいじりやすいというのはメリットなのですが、配布するゲームのセーブがいじれてしまうのはまずいです。Unityを使ってPCゲームを一般に配布するなら、セーブ方法は自前でファイルに保存するように実装しないと駄目でしょう。

    Androidとかだともう少しセーブがいじりづらい仕組みのようなので、気にしないで使うことにしています。とはいえ気になる人は自分でファイルを作ってデータを保存するのが良いのは間違いないです。セーブの改ざんをどこまで防ぎたいかにもよって手間の掛け方が違うということです。

    Windowsでセーブ内容を見るにはregedit.exeを使います。これはレジストリエディタというものでWindowsに付属しています。名前の通り簡単にレジストリがいじれます。 プログラムを検索すれば見つかるので、regeditで検索して開いてみてください。
    PlayerPrefsの解説ページにあるようにHKCU\Software\[company name]\[product name]キーのところに保存されています。このキーはレジストリエディタの左側のフォルダみたいなものです。HKCUというのが略でHKEY_CURRENT_USERのキーを表しています。
    下の図だとcompany nameがFreelyAppsでproduct nameがFreelyAppsキーの下にいくつか並んでいます。当然これはPlayer Settingsの値によって決まっています。プロジェクトごとにproduct nameが違えばちゃんと区別されているでしょう。
    playerprefs-reg
    名前と書いてあるものがPlayerPrefsのkeyに対応し、データが保存されている値になります。このデータを編集するとセーブを編集することが可能です。また項目を削除すればセーブからデータの一部がなくなったことになります。

    プロジェクトに対応するキーを削除するとセーブがなくなるので、いちからゲームを始めた状態を作りたいときはそうすると便利かもしれません。
    ただキーが削除できない場合があります。先ほどの画像のトランプ・ナポレオンというキーの下の謎の文字列はそういったキーです。選択すると下のようなエラーが発生します。もちろんキーを消すこともできません。
    regedit_nullerror

    この原因はキーにnull文字が含まれている場合だそうで、キーが文字化けしているのでわかりやすいエラーです。null文字ってC言語のやつと同じなのかとかなんで発生するのかはよくわかりませんでしたが、RegDelNullというマイクロソフトによるこの問題の対応ソフトがあるので使うと削除できます。regeditにこの機能を入れておいてよとか思いつつ、ダウンロードして実行してみました。

    exec-regdelnull
    こんな風に-sをつけておくとHKCU/Software/FreelyAppsキーの下を再帰的に検索してnull文字を検知してくれます。見つけると消すか聞いてくるのでYes答えましょう。これでレジストリエディタで消せなかった文字化けしているキーを消すことができます。

    たぶん日本語名のアプリだから起こる問題なのだと思います。英語のタイトルのアプリでは起きてないと思うので、その可能性が高いです。

    レジストリをいじるときは注意しましょう。
    最悪パソコンが起動しなくなる恐れがあります。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Android SDKのアップデートは、SDKをインストールしたフォルダにあるSDK Managerを実行してアップデートしたいものを選択していけば良いです。
    asdk-installmenu
     
     上の画像のようにアップデートがあるものについて選択されて開きます。基本的には全てアップデートすれば良いと思うので、右下のInstallボタンを押して進めます。

    ボタンを押すと、アップデートするものについての同意画面が開きます。同意しないと当然進めないので同意してInstallボタンを押します。後は待つだけで勝手にダウンロードとインストールを行ってくれます。
    うまく行く場合はこれで終了です。
    asdk-accept

    私がやったときはエラーが発生しました。アクセスが拒否されたといくつか表示されています。これを何とかしないとアップデートができません。
    asdk-deny

    エラーの原因は管理者として実行していないからでした。管理者として実行したいSDK Managerを選択した状態で右クリックのメニューにある管理者として実行を押します。
    これで実行したところエラーが発生せずパッケージの更新が完了できました。
    asdk-admin

    WindowsでAndroid SDKの更新を行う時は、管理者として実行しなければならないという教訓を得ました。


    【追記 】
    Twitterで原因について教えてもらったので、追記しておきます。 

    上で書いた内容はAndroid SDKがProgram Filesに入っていたから発生するようです。Program Files以下は特別な領域なので、編集するには管理者権限が必要だということです。
    Desktopやユーザーごとのフォルダ等の普通のフォルダにSDKがある場合は特に問題なく実行できると思います。(Desktopで試したところ問題は発生していませんでした。)

      このエントリーをはてなブックマークに追加 Clip to Evernote
    この記事を書いているときのアップデートは5.2.2f1から5.2.3f1です。

    アップデートの方法は、Unityの起動時に通知が来て自動的にウィンドウが開きます。 そのウィンドウでアップデートがあるから更新するかと聞いてきます。
    updateunity

    たぶんデフォルトだとCheck for Updatesにチェックが入っているので、更新が通知されます。Download new versionを押すと、最新のUnityのダウンロードサイトに飛ばされます。
    ダウンロードサイトからインストーラーを落とし、実行すればアップデートが可能です。ウィザードに従っていけばアップデートを自動で行ってくれます。

    更新通知が開かない場合でもアップデートがあるかチェックすることができます。Helpメニューにアップデートがあるか確認するメニューあるのでそれを押せば確認することができます。
    menuupdate


    ウィザードの表示を撮ったので載せておきます。バージョンによっては変わる可能性がありますが、そんなに大きくは変わらないと思います。

    1ページ目
    da-1

    2ページ目
    左下のチェックマークを入れないと同意したことにならず次のページに進めません。
    da-2

    3ページ目
    ダウンロードするものを選ぶ画面ですが、デフォルトのままで良いと思います。
    da-3

    4ページ目
    一時フォルダにファイルをダウンロードすれば良いので、そのまま進んで問題ありません。
    da-4

    5ページ目
    da-5

    6ページ目
    インストールが終わると個の画面になります。これが出ればインストールは成功しているでしょう。試しに起動してみてUnityのバージョンがどうなっているか確認すれば万全です。
    da-6

    インストールが終わるとWindowsのプログラムの一覧に新しいバージョンの項目が追加されます。画像のように古いバージョンのものも残ったままです。
    インストール先を変更していない場合はUnityを上書きしてバージョンアップしているので(古いバージョンは残っていない)古い方の項目は消しても構いません。
    startmenu

    このページのトップヘ