FreelyApps

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


    アプリ『トランプ・ジン・ラミー』を公開しました。
    Android/iOS https://goo.gl/PYKFYG

    タグ: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

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity Multiplayerを使ってオンラインゲームを作るといったときにはUnityを同時にいくつも起動するということがあるでしょう。複数のUnityを起動することでそれぞれが1つの端末としてデバッグすることが楽になるためです。
    作っているプロジェクトを丸ごとコピーするなどしてプロジェクトを増やすと、Unityとしてはそれらが別のプロジェクトとして認識し、同時に起動することができるようになります。
    別プロジェクトだけれども内容は一緒というのは管理しにくいので、それについてはバージョン管理ソフトを使って、複数の作業フォルダを作るというのがお勧めです。

    何度もやると、Unityを複数起動するのが面倒になってきます。
    色々な所にプロジェクトがあったりすると、いちいちウィザードから選んだり、フォルダのところに行ったりでわずらわしいです。
    ……なので、これを簡単に行う方法を私なりに実践しています。

    やり方はバッチファイルからUnityのプロジェクトを指定して同時に起動するという方法です。
    Unityはコマンドプロンプトからも起動できるので、バッチファイルで起動することができます。同時に起動するためにはstartコマンドを使う必要があります。使わないとコマンドが終わるまで次のコマンドが実行できないからです。startコマンドにより、本来終了してから次へという処理が同時に行えるようになります。

    以下のような内容のバッチファイルを作れば5つのプロジェクトが同時に開けます。プロジェクトのパスは全て異なるものにしてください。
    バッチファイルの作り方はテキストエディタに以下のコマンドをコピーして、ファイルを"ファイル名.bat"と名付ければバッチファイルになります。

    ここから
    set UNITY="C:\Program Files\Unity\Editor\Unity.exe"

    start "" %UNITY% -projectPath プロジェクトのパス1
    start "" %UNITY% -projectPath プロジェクトのパス2
    start "" %UNITY% -projectPath プロジェクトのパス3
    start "" %UNITY% -projectPath プロジェクトのパス4
    start "" %UNITY% -projectPath プロジェクトのパス5
    ここまでをコピペしてください。

    プロジェクトのパス1~5にはプロジェクトのあるパスで全て異なるように指定してください。 プロジェクトのあるパスとは、AssetsとかLibraryフォルダを含んでいるフォルダへのパスのことです。絶対パスで指定する方が問題が起こらないので、そうしてください。

    最後に起動してみたデモを載せておきます。 
    pre-nosou

    バッチファイルのアイコンが画面中央に表示されています。それをダブルクリックするとバッチファイルの内容が実行されます。ウィンドウがいくつも表示されているのでちょっとわかりづらいですが、複数のUnity起動されています。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    パッケージ(完成した実行ファイル)の中でどのようなアセットが大きな割合を占めているか簡単に知る方法があります。Unityは起動してからその動作をログファイルに記録しています。
    このログファイルにビルドしたときの情報が含まれます。

    ログファイルの見方はUnityのコンソールから行くのが簡単です。以下の画像のようにConsoleを開いておき、その右上にある小さなボタンをクリックします。Open Editor Logというメニューがあるので、それをクリックするとログファイルが開かれます。

    console-log

    ログファイルは単なるテキストファイルなので、PC上でファイルを探せば開くことができます。
    Windowsの場合は、C:/Users/<ユーザー名>/AppData/Local/Unity/EditorにできるEditor.logとEditor-prev.logがあります。Unityを落としたときは直前の起動のときの情報がEditor.logに含まれています。

    ビルドしたときの情報を見るためには、ビルド直後にログファイルを見た方が良いです。放っておくとどんどんログが増えていき、どこに必要な情報があるのかわからなくなるからです。ビルドした直後にファイルの下からさかのぼっていくと、以下のような場所が見つかるはずです。
    これがビルドしたときのファイルのサイズをまとめているところです。上の部分がアセットの種類によるサイズの割合で下の部分が個々のファイルのサイズの大きい順の表示です。
    この情報からどのアセットを削減していけばよいか目安にできると思います。

    buildlog


    このページのトップヘ