FreelyApps

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


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

    カテゴリ:Unity > 入門

      このエントリーをはてなブックマークに追加 Clip to Evernote
    第1日目
    神はプロジェクトを作った。プロジェクトには何もなかった。

    第2日目
    神はシーンを作った。シーンは世界であり、舞台であり、つまりは場所であった。

    第3日目
    神はシーンにゲームオブジェクトを作った。ゲームオブジェクトはシーンに存在するだけで何もしない存在であった。

    第4日目
    神はシーンに置いたゲームオブジェクトに世界を観察できる能力を与え、カメラとした。何も見えなかった世界はカメラを通して観察できるようになった。

    第5日目
    神はゲームオブジェクトに様々な能力を用意した。カメラ、ライト、レンダラー、……能力を与えればゲームオブジェクトは様々な役割をこなすことができた。

    第6日目
    神はスクリプトを作った。ゲームオブジェクトの能力を新たに作ることができる力である。この力をもってどんなことも成すことができた。

    第7日目
    神は完成したプロジェクトで遊ぶことにした。


    『創世記』をモチーフにUnityについて書いてみました。たまにはこういった遊びもおもしろいと思います。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unityでゲームを作るとしてもやはりプログラミングが必要です。通常のゲームプログラミングとは異なる考えで作ることにもなるので、プログラミングをやったことがある人はむしろ混乱するかもしれません。
    Unityのプログラムはスクリプトと呼ばれ、 これをゲームオブジェクトというものにくっつけることで動きます。ゲームオブジェクトは様々な機能のスクリプトをくっつけることができるものです。”もの”というのはそれ自体で何かするのではなく、機能をつけることでライトになったり、カメラになったり、モデルになったりと何でもなれるけれど何でもないという置き場所のような意味です。

    何かを始めるときに覚えることが多いと嫌になります。UnityのGUI操作は覚えることがそれなりに多いので、プログラミングはとりあえず作れるようになるくらいで始めるのが良いと思います。少なければいくつでも良いですが、3つだとわかりやすいと思ったので3つの関数について説明します。

    ゲームを作るために必要な3つの関数とは、
    1. Update
    2. Start
    3. Awake 
    のことです。この名前をつけたメソッドはUnityから呼び出されて処理されるという特徴があります。これはイベント関数と呼ばれています。Updateは毎フレーム呼ばれる最も重要な関数です。ゲームの処理はここに書いていくことになるでしょう。この関数だけあればゲームを作ることもできますが、初期化は別に分けられていた方が都合が良いです。そのための処理がStartとAwakeです。 
    名前からだと微妙なところですが、Awakeが先でその後にStartが呼ばれます。通常はStartだけ使うだけで十分だと思います。AwakeとStartの微妙な違いを理解できるようになったら、他のイベントも覚えていることでしょう。

    よくAwakeとStartが呼ばれないということで問題になることがあります。大抵の場合、そのスクリプトがついているゲームオブジェクトがアクティブでないかスクリプト自身が有効でないと思います。
    それ以外で呼ばれないとすれば、ゲームオブジェクトにつけてないか名前の打ち間違えでしょう。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Resources.Loadを使うと、動的にアセットを読み込むことができます。 動的にというのはシーン内に置かれていないかシーン内に置かれたゲームオブジェクトからの参照もないアセットを読み込むという意味です。
    Unityはシーンに必要な全てのアセットを自動でロードするので、シーンに置かれているもの、シーンに置かれているものが参照しているものは全てシーンの起動前にロードされるのです。

    使うためにはアセットをまず特別なフォルダに置かなくてはいけません。Resourcesというフォルダをプロジェクトのどこかに作ります。プロジェクトビューの直下(Assetsの直下)に置いても良いですし、どこか別のフォルダの下でも構いません。複数作ることも可能ですが、慣れないうちはひとつにしておいた方がわかりやすいです。
    Unityはいくつかのフォルダ名を特別扱いしています。 Resourcesもその中のひとつでResources.Loadでアクセスできる場所になっています。
     
    Resources.Loadの引数は文字列であり、これはパスを表します。Resourcesフォルダ内のどこにあるかをパスで記述します。Resourcesフォルダ内のPlayerという名前のプレハブであればResources.Load("Player")で読み込むことができます。Object型で返ってくるので、キャストが必要になります。
    Resourcesフォルダ内にさらにフォルダAがあり、その下のBGMというオーディオクリップを取得したい場合はResources.Load<AudioClip>("A/BGM")として読み込むこともできます。
    /を使って階層的になっているフォルダも対応できます。

    どのようなアセットでも動的に読みだせるので、使い道は広いです。共通で使うものはシーンに置いた方が便利ですが、特定の条件でしか使わないものや容量の大きいアセットの読み込みをどこかで行うといった使い方がありえます。シーンに全て置くことが可能なら、それも扱いやすいので無理にResources.Loadを使う必要はありません。

    Resources.Loadで読み込んだアセットはシーンが変わると破棄されます。シーンがひとつしかないとかしばらくシーンを変更しないがアセットはもう使わないのでメモリから解放したいということがあると思います。そういったときは読み込んだアセットを参照しているところをすべてなくした後、Resources.UnloadUnusedAssetsを呼び使われていないアセットを解放することができます。

    • 今読み込まれているのは何か?
    • 読み込み中なのか?
    • どれくらい読み込みを行うか?(メモリの限界の問題)
    • シーン切り替え時の対処
    といった問題が出やすいので、それに気をつけて使ってください。読み込んだつもりがアセットがないとかはエラーを引き起こしたりします。ロードのしすぎでメモリが足りなくなる問題は防ぎようがないので、いくつかの実機で試すしかありません。
     

      このエントリーをはてなブックマークに追加 Clip to Evernote
    この記事を検証したときのUnityのバージョンは5.1.2f1 Personalです。

    プロジェクトには何もいれずもっとも小さいアプリを作ってみます。
    デフォルトではヒエラルキーにはライトとカメラがあります。
    defhie
     
    これだけがシーンに存在するアプリをビルドしたときにapkのサイズはどうなるでしょうか?
    作ったファイルのプロパティを見てみると以下のようになっていました。約18MBです。何も入れていないのにも関わらず結構大きな容量をとっています。
     size

    上記のアプリではPlayer SettingsでDevice Filterという項目をFATにしていました。つまり、x86の端末向けのファイルまで含まれています。大抵の端末には関係ないので、ARM v7という設定にした方がアプリの容量が減ります。
    nox86

    ARM v7向けの設定にすると以下のように約10MB程になりました。
    nox86-size



    完成したapkの拡張子をzipにして展開してみます。 FAT(ARM v7 + x86)とARM v7のみの2つのapkに対して試してみます。
     
    まずFATの方は何がファイルサイズの大きなところを占めているかというと、以下の通りです。
    名前からわかるようにUnityのライブラリとMonoのライブラリが大きな容量を占めています。lib/x86とlib/armeabi-v7aにこれらのファイルが含まれているので、FATの方はx86用のライブラリの分大きくなっていると言えます。
    size-unzip


    ARM v7に設定した場合は次の通りです。
    x86用のライブラリがなくなるので、libunity.soとlibmono.soはひとつずつです。
    nox86-unzip
     
    これらのファイル容量を足すとapkのサイズを超えますが、apkは圧縮されたファイルなのでそうなります。 

    アプリの容量のほとんどがUnityのライブラリによって占められているという結果になりました。 x86端末のために出すアプリだったら別ですが、基本的にPlayer SettingsのDevice FilterをARM v7に設定しておく方が良いようです。
    Unityの機能が減るということはないので、ライブラリの容量は将来さらに増えるでしょう。使っていない機能は除外してビルドするといった機能が実装されると良いのですが、このあたりはスマホの進化によっても必要かどうかはわからないところです。通信速度が速くなり、ストア上のアプリの容量制限もなくなってくればあまり気にする必要がないからです。 

      このエントリーをはてなブックマークに追加 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
    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
    Unityをインストールしたらゲームを作ろうと思うでしょうが、まずは使い方を覚えなくてはいけません。適当にいじってみるのも勉強になりますが、最低限理解しているべきことがあります。
    それはインターフェースとUnityで使われている専門用語の概念についてです。自分のやりたいことをGoogleやYahooで調べようにも少しばかり知識がないと調べることも難しいと思います。シーン、ゲームオブジェクト、コンポーネントといった用語は説明にも多用され、自分なりに理解していないと説明を聞いても意味がわからないでしょう。

    日本語の公式ページにもチュートリアルというものがあります。
    tutorialjp

    こんな感じの見た目のページです。
    「はじめてのUNITY」というのがブロック崩しを作ってみる内容です。Unityの基本的な使い方を説明しながら、1つゲームを完成させることができます。
    「Unity BASIC」ではUnityの使い方を説明しています。インターフェースの説明です。こちらは知れば知るほどゲームを作るのが楽になります。いっぺんに覚える必要はないので、まずは一通り見てから「はじめてのUNITY」で手を動かして慣れていくのが良いと思います。
    「はじめてのUNITY」、「Unity BASIC」の下にもチュートリアルはあります。画像に半分ほど載っているすぐ下のものは「2Dシューティング」の解説です。2Dゲームと3Dゲームでは作り方が大きく変わるので、2Dゲームを作る場合は見ると良いと思います。Unityは元々3Dゲーム用のエンジンとして開発された経緯があるので、3Dゲームが基本です。3Dゲームの機能を2D用に特化された機能にして、2Dゲーム用の機能が存在します。3Dゲームを学ぶと2Dゲームの作り方にも通じるものがあるので、Unityではまず3Dゲームの作り方を学ぶのが普通だと思います。(そもそも2Dゲーム作成の機能は4.3頃から追加されたのです。)

    「はじめてのUNITY」、「Unity BASIC」を終えたら、Unityの基本は学べたと思います。これ以降は、マニュアルスクリプトリファレンスを良く見ることになると思います。
    マニュアルにはUnityの機能の説明が載っていて、全部を使う必要はないですが便利な機能がたくさんあり、知っていると自分で作る手間を大幅に削減することができます。スクリプト(Unityでのプログラムのこと)を書けばなんでもできますが、一から作るのは大変です。
    スクリプトリファレンスにはUnityの上でどのようなプログラミングをすれば良いのかを調べるために使います。プログラムするためのライブラリの使い方のことだと思ってください。
    マニュアルで機能を調べ、それを細かく制御するためにスクリプトリファレンスを調べてプログラムする。それを繰り返してゲームを作っていくことになります。

    英語の本家のサイトでもチュートリアルがあります。日本のページのものとは違いUnity5で作成されているようです。日本のものよりも少し難しめの内容になっていると思います。また英語の解説動画のため、聴き取りに苦労するかもしれません。

    「はじめてのUNITY」、「Unity BASIC」は良くできた内容なので、これを見て慣れることが最初の一歩だと思います。
     
     

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unityをインストールする方法についてです。
     
    まずUnityをインストールするためこちらのページからダウンロードする必要があります。 ダウンロードが終わったら実行してウィザードの指示通りに進めていってください。基本的にはデフォルトの設定のままでかまいません。以下のインストールするものをどうするか聞かれるページでExample Projectも入れても良いと思います。
    最低限必要なのは一番上のUnity 5.1.1.f1という本体だけです。Web Playerはウェブブラウザでの実行環境です。これはブラウザ向けのゲームを作らないなら、入れなくてもいいです。Standard AssetsはUnityが用意しているゲーム用の素材集みたいなものです。これは入れておいた方が良いと思います。どれも後で入れることはできます。

    choose-co

    インストールは10分くらいはかかるかと思います。インストールが終わるとUnityを起動できますが、 最初はアカウントのサインイン、ライセンスの選択、アンケートの解答を行わなければいけません。

    起動して最初の画面はサインイン画面です。
     signin

    (Unity5.1ではUnity Accountを作る機能がなくなり、Webページに飛ばすようになっていました。Unity4ではUnity上でアカウントの作成ができました。)
    アカウントの作成はこちらを参考にどうぞ。 アカウント作成サイトにはcreate oneと赤字になっているところをクリックして飛ぶことができます。
    登録したアカウントがあれば、EmailとPasswordにその情報を入れてSign inすれば次に進みます。

    次の画面はライセンス選択画面です。ProfessionalかPersonalかを選びます。
     license

    Professionalを使うにはあらかじめUnityの購入が必要です。シリアル番号を入力して認証するようです。
    Personalは無料で使えるバージョンです。機能的にはProfessionalと同等のものです。多少サービスの内容の質に差があるだけです。個人でUnityを使って稼いだ年間収入が$100000(約1200万円)を超えていなければいつまでも使えます。
    Personalを選択して次に進むを押すと、同意するかというウィンドウが出ます。
    agree
     
    Personalの使用可能条件が書いてあります。使用条件は使用者が個人なのか会社の一員なのかによって微妙に変わります。 いずれの場合も使用条件を満たさなくなったら、Professionalにしなければなりません。

    同意画面が終わったら、アンケートに答える画面になります。
     question

    答えても答えなくても次に進めます。私の場合は、よくわからない質問とかもあったのでわかるものだけ答えて次に進みました。

    これでUnityを使うための最初の設定が終わりました。今後はこの設定はすることはありません。アップデートをするときもこの設定が保存されているので、再度設定する必要もありません。

    このページのトップヘ