FreelyApps

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


    アプリ『トランプ・7並べ』を公開しました。
    Android/iOS https://goo.gl/zsFces

    2015年07月

      このエントリーをはてなブックマークに追加 Clip to Evernote
    このサイトは主にUnityの情報やAndroidアプリに関する情報を発信しています。知識だったり、発見だったり、実際に作ってみたものだったりします。
    徐々にサイトに来る人が増えてきているので、サイトの利用についての考えを書いておこうと思います。利用規約と考えてもらって良いです。普通にサイトを閲覧するだけであれば特に意識しなくても守っていただけていると思います。一般的なサイトで言われるようなマナーを守って利用してくださいという内容です。


    【利用規約】

    基本的には、FreelyAppsが作ったことが明らかであるものは利用してもらって構わないです。利用した上で発生した問題や損害に関しては、どのような場合でも保証はいたしません。利用した方の責任であることをご了承ください。

    一般的な良識の範囲でのご利用をお願いします。
    サイトの内容の転載、素材への直リンク、サイトに対する嫌がらせ、公序良俗に反するサイトの利用などといったことは行わないでください。

    多くの場合、問題が起こりやすいのは画像や音などの素材のようです。そのため、当サイトに掲載されている画像や音などの素材に関しては利用しないでください。

    GitHub上にあげたソースコードや記事の内容である情報については特に制限はありません。可能だったらここのサイトのものを利用したと表記をお願いします。

    当サイトの著作権は、全て著作者であるFreelyAppsが所有しています。


    【広告について】

    <Google AdSense>
    ユーザーのブラウザにCookieを保存したり、ウェブビーコンを使用したりして情報を収集する可能性があります。当サイトや他のサイトへのアクセス情報に基づいて、適切な広告をユーザーに表示できます。広告配信へのCookieの利用を禁止することも可能です。詳しくはこちらのリンクをご覧ください。

    <nend>
    個人を特定しない範囲で、ユーザーが利用する端末に関するCookie、匿名ID、端末機種情報、端末のイベント情報(ブラウザの種類、ブラウザの言語、ユーザーによるリクエスト情報、参照URL、URLスキーム情報、パッケージマネージャー情報を含むがこれに限らない)等を取得します。詳しくはこちらのリンクをご覧ください。

    <Amazonアソシエイト>
    「FreelyApps」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。
     


    質問等がありましたら、メッセージの方からご連絡ください。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    C#でスクリプト上で重い処理を作ったとします。大きなリストの複雑なソートをするとか、大量の計算を行うといったことです。
    そういったときスクリプトのある特定の部分に書いてあることが、どれくらいの時間で処理されるのかということを知りたいことがあるでしょう。 こういったときはC#のStopwatchクラスを使うと簡単に実行時間が測れます。以下にコードを載せておきます。


    ストップウォッチクラスを作り、Startします。処理が終わったタイミングでStopし、ElapsedMillisecondsでかかった時間をミリ秒単位で取得しています。非常に簡単なコードなので、簡単にパフォーマンスを測れます。
    リリース版に計測用のコードが紛れ込むのが嫌なら、定義を使っておくと良いと思います。(#if DEBUGなど)

    ProfilerやFPSの計測よりも細かな範囲でのパフォーマンス計測になります。はじめは大きな計測から始めて、徐々に計測範囲を狭めていくと処理が重い原因を調べやすいと思います。
    このスクリプトのあるメソッドが重いとわかっているなら、今回の計測方法でさらに詳しく原因を探れるはずです。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    以前のビルド環境整備が終わっていれば、すぐにでもアプリを作りたいと思うでしょう。

    ビルドを行う前に適当なプロジェクトを用意する必要があります。どのようなものを使うのかは自由ですが、最低限必要なものがいくつかあります。 
    ビルドして端末でアプリを動かすことを今回の目標とするので、以下で用意するプロジェクトの中身は最低限のものにしています。

    新しくプロジェクトを作りましょう。作ったばかりのプロジェクトUnityで開くと、ヒエラルキーには次のように2つのゲームオブジェクトが存在しているはずです。適当に何かを配置しても構いませんが、最低限なのであればこれをそのまま保存してシーンを作成します。
    FileメニューのSave Sceneを押してシーンとして現在のヒエラルキーを保存してください。
    defhie

    上でのシーンをmainと名付けた結果、プロジェクトビューは以下のようになります。mainシーンだけが存在しています。このmainというシーンファイルにヒエラルキーにおいたゲームオブジェクトの情報などが含まれています。
    leastpro

    ゲーム自体の編集は以上です。本来であればシーンにいろいろなものを置いたり、スクリプトを書いてゲームの挙動を決めますがビルドには必須ではありません。
    FileメニューBuild Settings...を押して以下のウィンドウでビルドに含めるシーンと対象プラットフォーム(ここではAndroid)を決めます。
    プロジェクトビューにあるmainシーンをドラッグアンドドロップでScenes In Buildと書いてある領域に置くか、mainシーンを開いた状態で右下のAdd Currentを押してビルドするシーンにmainシーンを含めます。複数追加してしまった場合はDeleteキーで削除して、画像のようにひとつにしてください。
    左下のPlatformはAndroidを選択します。プロジェクトのデフォルト設定だとPCに設定されているので、Androidの項目を選びSwitch Platformというボタンを押してください。プロジェクトに含まれるリソースをプラットフォームに適した状態にコンバートされます。ほとんど何も入れていないプロジェクトの場合、変換はすぐに終わり画像のようにAndroidを選択した状態になります。
    bse

    最後にPlayerSettingsの設定をします。Build Settingsウィンドウの下部のPlayer Settings...ボタンを押すかEditメニューのProject Settings->Playerを押してPlayerSettingsを開きます。
    Androidのマーク(ドロイド君)を押して、Android用の設定を行います。Other SettingsのBundle Identifierははじめ「com.Company.ProductName」になっています。これを適当な文字列に変更しないとビルドが失敗します。とりあえずここでは「com.test.app」としてビルドを行いました。
    Bundle Identifierはアプリの固有の識別子です。他のアプリと同じであることは許されません。
    ps

    Android端末をつなぎ、Build And Runを押せば自動でアプリがインストールされ実行できます。Android端末は開発者向け(USBデバッグの有効化、USBからのアプリのインストールの許可など)の設定にし、PCにはドライバを入れる必要があったと思います。

    無事実行できたら、端末に「New Unity Project」という名前のアプリがインストールされています。 実行結果は次のような画像になるはずです。
    ss

    カメラがあるだけなので、何もなく空だけがあるような画面になります。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    このブログをはじめてから約3カ月くらいになります。

    はじめて月間のPV数が1000を超えることができました。 徐々に訪問数も増えてきていて嬉しい限りです。いつかは「Unityのことを調べるときにこのブログを参考にしたら良いよ」というようなことになったらと思いつつ、更新をこれからも続けていこうと思います。

    訪問してくださった皆様ありがとうございます。 

    今後も何らかの区切りごとに記事にして後で振り返られるようにしておこうかと考えています。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    PCの操作を撮影したいことがあります。それもそんなに大容量なファイルに書き出さないようにしたいときです。具体的な例で言うと、TwitterにPCの操作画面を載せるときなどです。Twitterは3MBまでの容量制限があるので、普通の動画ファイルをアップすることは無理なことが多いです。
    要望を満たすスクリーンのある範囲を軽いファイルで録画できるフリーソフトを紹介します。

     以前、ロイロゲームレコーダーを使い動画を撮ることを記事にしました。ゲームプレイの動画を撮る以外にも操作しているウィンドウの録画ができるので、PCの操作画面も撮ることができます。
    スクリーンのある範囲を録画しているわけではないので、下のように複数の異なるソフトを同時に撮るといったことはできません。
    mulwin

    画面上のある範囲を録画するレコーダーは、スクリーンレコーダーとかで検索すると見つかると思います。私が使っているソフトは、ScreenToGifというものです。
    ウィンドウの枠だけのような見た目のソフトでこの枠がそのまま録画できる範囲を表しています。ウィンドウのサイズと位置を調整したら、Recordボタンを押して録画できます。簡単に録画ができるのがすごく便利です。

    stg

    録画をやめたくなったら、Stopを押して録画終了です。終了後には下のような編集画面が開きます。色々な編集ができますが、特に何もせずDoneを押せばそのまま録画がGifとして保存されます。操作画面を撮っていると、動画の初めと終わり部分はいらなかったりすることが多いのですが、ScreenToGifではある時点の前もしくは後ろを全てカットする機能があり簡単に邪魔な部分を消せます。

    stgedit

    GIFファイルは画像なので、音声を入れることができません。操作中の音を入れたいという場合はこのツールでは対応できないので、その場合はロイロゲームレコーダーを使うとか他のツールを使う必要があります。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    私が思う習熟度の分け方について説明します。このブログでもその区分けをして説明していることがほとんどです。
    入門、初級、中級、上級の4つに分けられると考えています。どういった理由でこれらが分かれるかを知ってもらうとブログの説明も読みやすいかもしれません。 

    はじめたばかりの人は入門です。Unityマニュアルの概要の内容を全て理解することが初級との境目だと思います。Unityで使われる専門用語の理解、インターフェースの使い方に慣れること、ゲーム完成までの作業の流れの理解、ビルドをして実行可能なファイルとして書きだすこと、これらのことができるようになると入門は卒業です。
    Unity自体を使うことは目的ではなく、ゲームを作ることが目標であるはずです。ひとつでも完成させることがなければ入門レベルから進めないでしょう。
    Unityを使えば簡単にゲームが作れると思うかもしれません。簡単にゲームを作り始めることができるだけであり、ゲームを作るのは簡単ではありません。絵を表示する、音を鳴らすような基本的なゲームで必要なことまで自作しなくても良いだけのことです。パズルが作りたければ、パズルのルールは自分で作らなければならないのです。入門を超えるのは非常に大変なことです。特にゲームを作ったことがない人は大変です。

    初級と中級の境目は経験と専門性です。
    大雑把に言うとUnityの大体のことがわかったという印象を持ち始めるのが中級くらいの人だと思います。知識としてはUnityの用意しているコンポーネントの半分くらいを理解していれば中級だと言えると思います。実現したいことがあるとき、Unityだったらこうすれば簡単にできそうだと発想できれば初級からは完全に脱却しているでしょう。
    専門性というのはUnityことだけでなく、Unity外の知識も含まれます。特定のプラットフォームにリリースする場合、必要になってきます。Androidでリリースするなら、Android ManifestやGoogle Playへの登録方法なども知っていくことになります。
    Asset Storeにある様々なアセットのうち、これは便利だというものを知っているというのも重要なことです。自分以外の人が作ったものをうまく使うことやプロジェクトを読み解いていく力というのは、上達する上で必要なことだからです。
    何らかのSDKをプロジェクトに使うといった場合は、中級レベルの作業であるということが多いと思います。

    中級でもかなりのレベルだとわかります。ゲームを作るなら、中級レベルの人がいれば完成させられるでしょう。では上級とはどんなレベルなのかというと、中級になってからも継続してUnityの知識を深めていること、問題点を自分で調べられることが行っているかどうかです。
    上級とはUnityをどこまで使いこなせるかというUnityで遊び始める段階のことです。中級を超えていることは前提条件にすぎません。中級では新しい機能は必要だから覚えます。上級ではおもしろいから使ってみます。ゲームを作るという目的には反しているように見えますが、知識は役に立つのでゲームを作ることもできます。
    このブログで入門、初級、中級ということについては記事にしていることが多いですが、いまのところ上級の記事はありません。それは中級以上の知識はそれほど区別ができないためです。

    最後に私は上級に属していると思っています。ただ、Unityを触れずに時間が 経ってしまえばまた入門から始まることになるかと思います。Unity自体が急激に変化していることを忘れず、ついていくことが上級になることだと思います。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    プロジェクト(Unityの作業フォルダの意味の方)が大きくなってくると、どのアセット(ファイル)を使っているのかわからなくなってきます。
    あるプレハブが別のプレハブを参照していたり、シーン内のゲームオブジェクトの深い階層からアセットが参照されていたりすることになっていると、もう管理しきれなくなります。
    参照がされているということはそれが必要だということです。間違えて参照がされているアセットをプロジェクトから消してしまうと、それを参照できなくなり何らかの問題が起こるでしょう。

    不必要なアセットをプロジェクトに入れておくことは良くないです。不要なアセットを手違いで使ってしまったり、余計な作業の発生があり得るからです。
    できることなら不必要なアセットは定期的に削除してしまい、必要なものだけを残していくというのが理想的です。特に大きなプロジェクトだと重くなっていくので、要らないものは極力なくす方が作業を効率的に行うためには重要です。

    解決策は2つあります。
    ひとつはプロジェクトに追加はしても消すことはしないことです。このルールを守るだけで参照できなくなることはありません。解決というよりは臭いものにふた的な発想です。しかしながら、意外と悪くない方法なのです。Unityは使っていないアセットをビルド時に除外するということをやっています。したがって不要なアセットを参照さえしていなければ、ビルドしたものにおいてそれは存在していないのと同じなのです。(Resourcesフォルダにある場合は例外。)
    もうひとつはプロジェクトで確実に使われていないことを調べたうえでアセットを削除することです。 これを行うのは少し難しいです。また労力もかなりかかります。
    アセットのそれぞれにはGUIDと呼ばれる識別子が与えられていて、Unityはそれでアセットを区別することができます。リネームしたり、移動したりしても参照が切れないのはこのGUIDを使ってUnityが参照を管理しているからです。
    このようなUnityの管理方法をそのまま自分で再現すれば、どのアセットが使われているのかがわかります。少し手順が複雑になりますが、以下がその手順です。決まった作業なので、頑張れば自動化も可能だと思います。

    メニューEdit->Project Settings->Editorを選び、Version ControlのModeをVisible Meta Filesにし、Asset SerializationのModeをForce Textにします。(バージョン管理をしている場合はこれらが設定されているかもしれません。バージョン管理については、ここの記事を参考にどうぞ。)
    Version ControlのModeをVisible Meta Filesにすることによりmetaファイルができ、対応するアセットのGUIDを調べることができます。下のようにCube.prefabに対応してCube.prefab.metaというファイルが同じ場所に存在します。
    metafile

    Asset SerializationのModeをForce Textにする理由は、デフォルトでバイナリファイルであるシーンやプレハブのファイルをテキスト形式で保存するためです。これにより全てのアセット内を検索することが可能になります。GUIDを検索できるようにするために必要というわけです。

     metaファイルを開いてみると、こんな感じです。
    meta
     2行目にguidというものがあり、これがGUIDになります。0c65~でフォルダ内をgrep(複数のファイルを同時に検索)して、どこに同じGUIDがあるかを調べます。
    見つかったファイルが検索したGUIDに対応するファイル以外であれば、そこからは参照があるということです。Unityのヒエラルキーやインスペクタ―を使って参照がされていることを確認してみてください。
     
    検索したGUIDに対応するファイルしか見つからなかった場合、それを参照しているアセットは存在しません。よって、それは削除してもかまわないものと見なせそうです。
    最後に調べるべきこととして、Resources.Loadを使用して動的なアセットの読み込みを行っていないか調べなくてはいけません。Resources.Loadを使うにはResourcesフォルダ以下にアセットが置かれていなくてはならないので、消そうとしたアセットがResourcesフォルダ以下にないことを確認します。
    以上が確認できれば、そのアセットは使われることはないので削除しても問題はありません。 

    まとめると、安全にアセットを消したい場合は次の2つの条件を満たす必要があるということです。 
    1. 対応するmetaファイルにあるGUIDでプロジェクトフォルダをgrepし、検索結果に他のファイルが現れないこと
    2. Resourcesフォルダ以下にアセットがないこと
    ひとつのアセットを消すのにこれだけの手間がかかるので、アセットの参照関係を忘れてしまうと大変です。覚えていれば、上記の作業を省けます。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unityを使ってAndroidアプリを作ることができます。公式ブログに記事があるのですが、2013年5月末にAndroid/iOSへのビルドが無償化されました。
    もちろん現在のUnity5においてもPersonal版(無償版)でAndroid/iOSアプリの出力が可能です。

    Androidアプリの作り方は、設定を一度行ってしまえば、その後は決まった作業をするだけなので簡単です。ただこの設定が曲者なのです。今回は設定についてのみ説明します。ビルドそのもののやり方については後ほど記事にしようと思います。

    必要なものは3つあります。
    • Unity
    • Android SDK
    • JDK
    が必要です。上位にあるものが下位にあるものを必要としています。UnityでAndroidアプリを作成するにはAndroid SDKが必要であり、Android SDKを動かすにはJDKが必要です。Unityはビルド時だけAndroid SDKを必要とするので、先にUnityだけインストールされている状態でも問題なく始められます。いずれかのインストールが住んでいる場合は以下手順の対応項目の部分を行わずに次に進んでいってください。
    Android SDKを使うにはJDKが必要なので、JDKをインストールしその次にAndroid SDKを入れるというのが良いと思います。

    JDKのインストール
    JDKはこちらのページからダウンロードしてインストールします。
    jdk

    上の画像の赤い枠で囲ったところがJDKのインストールページになります。クリックして次のページに進んでください。

    jsedk

    進んだ先のページにどのOS向けのJDKが必要かを選択するところがあります。Java SE Development Kitと表示されているところを見つけてください。8u45というのはバージョンのことだと思います。
    ライセンスに同意するチェックをしたら、自分のPCに合うバージョンを選択してインストーラをダウンロードします。ダウンロード後はインストーラの指示に従ってインストールを行ってください。

    Android SDKのインストールとセットアップ
    Android SDKはこちらのページからダウンロードしてインストールします。
    Android StudioというIDEに付属しているものを使っても良いし、SDK単体のものを使用してもかまいません。いずれにしろAndroid SDKが使えれば問題ありません。
    インストールが終わったらインストールしたフォルダに行き、SDK Manager.exeを実行してください。

    asdk

    ToolsといずれかのOSバージョンのAndroidをチェックしてインストールをしてください。非常に長い時間がかかります。(~1時間程度)
    Android SDKの設定については公式マニュアルでも解説されているのでリンクを貼っておきます。

    Unityの設定をする
    最後にUnityが必要です。Unityのインストールを行ってください。 インストール方法がわからない場合は以前やり方を記事にしていますのでそちらを参照してください。
    Unityを開いたら、メニューからEdit->Preferencesを選びます。ウィンドウが開くので、External Toolsタブを押します。

    asdkpath

     Android SDK LocationとJDK Locationに正しいパスを設定することでAndroid向けのビルドの準備は完了です。Android SDKのあるフォルダには次のようなフォルダが含まれていると思います。
    asdk
     
    JDKのあるフォルダはC:\Program Files\Javaの下にあるのが一般的だと思います。「jdkバージョン名」というフォルダがあるはずです。

    以上でビルドの環境整備ができました。結構面倒ではじめてUnityを触る人が準備するのは大変だと思います。

    ビルドについての説明は「Androidアプリのビルド」をご参照ください。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    アンドロイダーに『Pick Up A Diamond』が紹介されました。記事のページへのリンクを載せておきます。

    『Pick Up A Diamond』は端末を傾けるだけで遊べる物理パズルゲームです。Unity Ads、Everyplay、Unity Analyticsを実装しているため、それらの機能を実装しようとしている方には参考になるのではないでしょうか。
    こちらがアプリのページへのリンクです 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    BGM用のファイルをインポートするとデフォルトの設定がオーディオクリップに適用されます。
    audioclipsetting

    これをインスペクタ―上から手動で設定することが普通だと思いますが、数が多くなってくるといちいち設定をするのが面倒になります。手動での設定は行うことを忘れることもあります。
    これらを解決するには自動で設定を行えるようにするのが一番です。

    AssetPostprocessorというクラスを継承してクラスを作ります。AssetPostprocessorはアセットのインポートや変更時になんらかの処理を行うために使うクラスです。
    Editorフォルダの下にスクリプトをおかなければいけません。(Unity5からなのかEditorフォルダの下に置かなくても動作するようになっていました。しかしながら、互換性のためEditorフォルダに置くことを推奨します。) 

    上のスクリプトはBGMをインポートしたときにオーディオクリップの設定を行うサンプルです。
    BGM_IMPORTERシンボルが定義されていれば、Resources/Sound/BGMにおかれたオーディオクリップをストリーミング再生で圧縮フォーマットはOgg Vorbisというように設定します。
    新しくオーディオファイルを追加したときはこのスクリプトの処理が行われます。既に追加してあるファイルに処理を通したい場合は、リインポートを行うかオーディオクリップの設定を変更すると処理が通ります。
    リインポートはアセットを選択した状態でAssetsメニュー->Reimportを選択するかアセットを右クリックして出るメニューからReimportを選択すればできます。フォルダを指定するとそのフォルダ以下をリインポートすることもできます。

    上記のスクリプトはBGM用に作ったものですが、少し改造すればSEやVoiceといったBGMとは少し設定を変えるであろうオーディオクリップにも使えます。
    フォルダを分けるのが素直な方法だと思います。 Resources/Sound/SEとかResources/Sound/Voiceにあるファイルだったらで場合分けするというのがお手軽です。

    こういった自動化用のスクリプトはEditor拡張というやり方でUnityは柔軟に対応することができるようになっています。 Editor拡張は面倒なことが多いのですが、一度作ってしまうと後の作業を劇的に減らしてくれる可能性を秘めています。
    同じような作業を繰り返していると感じているときは自動化できないかと考えてみると楽ができます。

    このページのトップヘ