HaLake Magazine

コワーキングスペースHaLakeの技術情報発信サイト!IoT,AR,VRなど最新技術情報をお届け!

【2020年版】Unityインストール~ミニゲーム作成(入門・初心者)

f:id:mischief_cat:20200424115910p:plain

目次

  1. インストール
  2. ゲーム作成
  3. おまけ
  4. まとめ

動作環境

windows10 64bit
Unity 2019.3.9f1(Unity 2019.3.11f1でも可)
Unity 2019.3.~なら動作確認済み。それ以外は保証しません。

参考サイト

【初心者でも安心】Unityのダウンロード〜インストールまで徹底解説 | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト

インストール

サクッとインストールしていきましょう。
まずはUnity Hubをダウンロードします。数年前にはこんなのなかったのですが時代が進んでUnityのバージョン管理がしやすくなったみたいです。世の中便利になってゆくものですね。 まずは下記URLにアクセス。
https://store.unity.com/ja/?_ga=2.87454808.1330355094.1587536022-1199353874.1586658817#plans-individual f:id:mischief_cat:20200424105747p:plain 今回はPersonalを選択、初心者ならこれで十分だと思います。
f:id:mischief_cat:20200424105914p:plain f:id:mischief_cat:20200424105934p:plain 利用規約を確認し同意の上で次に進んでください。
f:id:mischief_cat:20200424110016p:plain ライセンス条件を確認後同意した方は次に進んでください。
f:id:mischief_cat:20200424110107p:plain Unity Hubのインストール完了後自動で起動するようにチェックを入れて完了ボタンをクリック。
f:id:mischief_cat:20200424110223p:plain 自動起動
Unity自体をインストールしていきます。 f:id:mischief_cat:20200424110244p:plain Unity2019.3をインストールとなっていることを確認してください。
このインストール方法では正式リリースされた最新バージョンを自動で選択してインストールしてくれるので他のバージョンが指定されている場合は最新版をインストール後別バージョンをインストールできるので各自でダウンロードしてください。
Unityはメジャーアップデートされるとうまく動作しなくなることが多いそうなのでなるべくバージョンを合わせる必要があるみたいです。
動作バージョンは記事最上部の動作確認を参照してください。
f:id:mischief_cat:20200424111810p:plain 初めての方は必要事項を記入後Unity IDを作成かすでに持っている方はそちらを選択してください。 f:id:mischief_cat:20200424112537p:plain インストール完了後サンプルのゲームを遊ぶことが出来るようになっています。名前と遊びたいサンプルを適当に選んで次に進みましょう。
f:id:mischief_cat:20200424112850p:plain 先ほどからも出ていると思いますが、ダウンロードとインストールのゲージが出ていると思うので100%になるまで待ちます。完了後LANCH UNITYと出てくるのでクリックし選んだサンプルがプレイできるようになっています。 次はゲームを新しく作っていくので遊び終わったら閉じておいてください。 メモリをかなり使っているので起動させすぎると動作がもっさりしたり不具合を起こすので注意しましょう。
ほかのアプリも同様です。

ゲーム作成

プロジェクト作成

unity hubがインストール出来たら起動します。
起動後は画像に従ってください。

f:id:mischief_cat:20200417142650p:plain 赤く塗りつぶされているところには今後、読者が作ったプロジェクトの一覧になっていきます。個人的に見せたくないので塗りつぶしています。

f:id:mischief_cat:20200417142712p:plain新規ウィンドウが開かれて画像のようになります。
画像で書かれている名前や保存先は例なので読者が自由に変えてもらっても構いません。私は画像のように進めていきます。

f:id:mischief_cat:20200417143241p:plain プロジェクト作成完了までのゲージが出てくるので終わるまで少し待ち、画像のような画面になったら作成は完了です。

f:id:mischief_cat:20200417143844p:plain もう一度Unity hubを開いてみるとしっかり作成されていることがわかります。
バージョンなども確認と変更などができるので確かめてみてください。
次回開きたいときはここからプロジェクトを開くことができます。

アセットの追加とインポート

今回使うアセットを最初に追加していきます。
インポートするアセットはStandard Assetsだけで充分です。 Standard Assetsは最新版に合わせて新しく作っているのか作る気がないのかわかりませんが執筆現在では2018年で更新が途絶えています。
しかし少し手を加えてあげるだけで現在のバージョンでも動いてくれるので使っていきます。

f:id:mischief_cat:20200419093344p:plain

f:id:mischief_cat:20200419093546p:plain 初めて追加する人は赤枠のところがDownloadとなっているのでダウンロードした後に画像と同じくImportと出てくるので必ずインポートしてください。

f:id:mischief_cat:20200419095326p:plain ダウンロードだけではプロジェクトで使えないのでしっかりインポートしましょう。
先ほども話したようにこのアセットは古くなっているので新しく作ろうとしている?のか今のバージョンだと不具合が出ているらしく、悪さをしているスクリプトがあるらしいのでそちらを消していきます。こちらの操作は先人が簡潔な操作説明をしているのでそちらを参考にしてください。

www.sbcr.jp

  • 注意:上記の操作を必ず行ってください。このままでは正常に動作しません。

一度ダウンロードしたアセットは今後画像と同じようにImportと出てくるようになるのでインポートだけすればよくなります。
アセットストアウィンドウの上部にあるMy Assetsを選択することで一度ダウンロードしたアセットが見られるようになっています。

これでアセットの追加は終わりました。

フィールドの生成

最初にこのままでは人型のモデルをせっかく追加しても底なしの沼に落ちていくだけなのでまずは足場を作っていきます。 一番簡単な方法は別にありますが最後に地形の追加などもしていきたいのでTerrainと言う機能を使っていきます。
Terrainは名前の通り大地をつくるためにあり早速作っていきます。

f:id:mischief_cat:20200417165515p:plain

  • 注意:画像内では左クリックとなっていますが右クリックです。

青枠内の場所をHierarchy(ヒエラルキー)と言います。unityを触るのが初めての人は覚えておいた方がいいと思います。画面それぞれの場所でできることなどが決まっているのでそれぞれ少しだけ説明を挟んでいくので覚えていってください。細かい説明は省きますが深く知りたい方は個人で調べると良いでしょう。

f:id:mischief_cat:20200419104307p:plain
新しくチェスボードのようなものが追加されます。 このようになればモデルが底なしの沼に落ちることがなくなります。
青枠の場所がInspecter(インスペクター)と言いオブジェクトなどの細かい設定をしていくところになります。

キャラクタの追加

モデルの追加をしていきたいと思います。
Standard Assetsは無料でとても優秀なので人型のモデルも入っているのでそちらを使えるようにしていきます。

f:id:mischief_cat:20200419111531p:plain 青枠のProject(プロジェクト)は追加したアセットや自分で作ったマテリアルやプレハブなどを操作する場所でエクスプローラなどと同じ使い方になります。
モデルを取り出すためにプロジェクト内で操作をして

Assets>Standard Assets>Characters>ThirdPersonCharacter>Prefabs>ThirdPersonController.prefabs

ヒエラルキーにドラッグ&ドロップして追加します。
これで画像と同じようにSceneにキャラクターが追加されます。
実際に動かしていきます。 f:id:mischief_cat:20200419113715p:plain 画面上部の再生ボタンを押すことで開始と終了ができます。

f:id:mischief_cat:20200419114908p:plain 初期の位置だとチェスボードのようなところから落ちてしまうことがあるのでヒエラルキーで先ほど追加したThirdPersonControllerをダブルクリックするとモデルに視点がフォーカスしてして矢印が出てくるので自由に動かして位置を調節しておきましょう。

再生ボタンを押してエラーが出ずに実行出来たらマインクラフトと同じうような操作方法で動かすことができるようになっています。
この時点でエラーが出ている場合はアセットの追加の時の悪さをするスクリプトを消していない可能性があるので前章を参考にもう一度確認してみてください。
無事動かすことができたら成功です。
でもこれだとカメラが止まってて画角からキャラクタが出たら見えないじゃんってなりますよね。
次にカメラの設定を行っていきます。

f:id:mischief_cat:20200419121255p:plain ヒエラルキーにすでに用意されているMain Cameraを選択し画像に従って操作します。
プレビューを見て自分好みにできたらヒエラルキーMain CameraThirdPersonControllerにドラッグ&ドロップします。

f:id:mischief_cat:20200419122422p:plain ThirdPersonControllerの中にMain Cameraがあれば大丈夫です。
こうすることでThirdPersonControllerが親でMain Cameraを子として扱われるので簡単に説明するとカメラのポジションをキャラクタの移動に合わせてずらしてくれるようになります。説明下手なので実際に動かしてみればわかります。先ほどまではカメラが固定されていたのに対して今回はキャラと一緒に移動していることがわかります。
私は昔unityを触ったときはまたっく何の知識もなくここまでのことすら出来なかったので今では簡単にここまで出来ちゃうことに感動しています。
初めて触る方は割とスゲーって思うんじゃないかな?皆さんはどうでしょう。

オブジェクトの追加

今回はちょっとしたゲーム(マリオがコインを集める的な感覚)を作っていくのでコインと同じような機能を果たすオブジェクトを作っていきます。
あまり作り込む気はないので適当で。 f:id:mischief_cat:20200419123202p:plain 画像のようにヒエラルキーで右クリックし3D ObjectからSphereを選択し球体のオブジェクトを作成します。
Sphereではなくても自分の好きなものでも構いません。
追加したら適当に移動させて実行し確認してみましょう。 f:id:mischief_cat:20200419124017p:plain こんな感じであれば大丈夫。
こいつに光を追加してみましょう。
今回追加したオブジェクトの上で右クリックし画像に従ってください。
f:id:mischief_cat:20200419124815p:plain そうすると光が追加されると思います。
これは光が球体の子オブジェクトとして登録されている状態になります。
今回はPointLightを選択しましたが必要に応じて他に変えても構いません。
次にキャラがこのオブジェクトに触れたときの挙動をいろいろ設定していきたいと思います。
追加したオブジェクトを選択しインスペクターの設定を画像を見てしてください。
f:id:mischief_cat:20200419125920p:plain こうすることでゲーム内ではすり抜けるようになりプログラムからその時の当たり判定を使うことができます。
その後 f:id:mischief_cat:20200419131226p:plain f:id:mischief_cat:20200419131242p:plain f:id:mischief_cat:20200419131525p:plain
タグを新しく作って登録したタグをオブジェクトにつけておく。 こうすることでプログラムからオブジェクトの種類をタグで判断することができるようになります。

  • 注意:私は最初大文字のSphereと登録しました。

次はようやくプログラムを書いていきます。
追加したオブジェクトに触れたら消えるようにしていきます。
プロジェクトからAssetsを選択して画像にしたがってスクリプトファイルを作ってください。
f:id:mischief_cat:20200419135651p:plain 名前は安直に

sphere_destroy

としておきます。
作ったスクリプトファイルの中のコードを削除し以下をコピペしてください。

using UnityEngine;

public class sphere_destroy : MonoBehaviour{
    void Start(){
    }
    void OnTriggerEnter(Collider collider){
        Destroy(this.gameObject);
    }
}

保存したらオブジェクトにアタッチしていきます。
f:id:mischief_cat:20200419142123p:plain ここまで出来たら実行して追加したオブジェクトに触れてみてください。
ちゃんと消えたら成功です。

スコアボードを追加する

画像に従ってください。
f:id:mischief_cat:20200419144025p:plain f:id:mischief_cat:20200419144255p:plain 数値の設定を行ってから好きな位置に移動させた方がいいと思います。
数値は大きめにとってあるので好きに変えても構いませんが小さすぎるとフォントの大きさによってはうまく表示されないことがあるので今回は適当に大きく取っておきましょう。
実行して同じように設定していれば左上端に表示されれば成功です。
後ほど使用するのでここまででスコアボードは完成です。

ゲームのプログラム作成

先ほどと同じようにスクリプトファイルを生成し名前を

counter

としておきます。
その後中身を消して以下をコピペして下さい。

using UnityEngine;
using UnityEngine.UI;


public class counter : MonoBehaviour{

    public Text scoreText;
    private int score = 0;

    void Update(){
        scoreText.text = "Score:" + score;
    }

    void OnTriggerEnter(Collider collider){

        if (collider.gameObject.tag == "Sphere"){
            score++;
        }

    }
}
  • 注意:18行目のSphere(Sは大文字)は先ほどタグで登録した名前と同じにしてください。触れたオブジェクトのタグで判断しているのでタグ名と合致していないといけません。

保存しスクリプトを先ほど説明したオブジェクトにアタッチするのと同じようにThirdPersonControllerにアタッチしていきます。
これはThirdPersonControllerにアタッチする必要はありませんがわかりやすくキャラクターに付与させておきます。
画像の赤枠のようになっていれば成功。 f:id:mischief_cat:20200419152101p:plain 次に青で書かれているように操作してください。
終わったら実行して確かめてみると f:id:mischief_cat:20200419152330p:plain スコアボードに出力されて球体を触って消すと f:id:mischief_cat:20200419152332p:plain スコアボードに加算されていきます。 まだオブジェクトは一つなので1までしかカウントしませんが次で複数生成していきます。

オブジェクトをランダムに複数生成

まずはヒエラルキー内の追加したオブジェクトのプレハブを生成します。 f:id:mischief_cat:20200419155620p:plain これだけでプレハブの完成、簡単でしょ!
そしたらスクリプトファイルを作成、名前は

random_sphere

中身を削除して下記をコピペ

using UnityEngine;

public class random_sphere : MonoBehaviour
{
    public GameObject sphere;

    void Start()
    {
        for (int i = 0; i < 10; i++) {
            float x = Random.Range(1.0f, 20.0f); //1~20の間のX座標を生成(横)
            float y = Random.Range(0.5f, 2.0f); //0.5~2の間のY座標を生成(高さ)
            float z = Random.Range(1.0f, 20.0f); //1~20の間のY座標を生成(縦)

            Instantiate(sphere, new Vector3(x, y, z), Quaternion.identity);
        }
    }

}

保存してヒエラルキーのThirdPersonControllerにスクリプトをアタッチし作成したプレハブをドラッグ&ドロップで指定していきます。
こちらも適当にわかりやすくキャラクターにアタッチしていきたいと思います。 f:id:mischief_cat:20200419163027p:plain 操作完了後実行してみると f:id:mischief_cat:20200419163319p:plain すべてに触って消してみると f:id:mischief_cat:20200419163404p:plain スコアが11になっているのはプログラムでは10個プレハブから生成しているのですが最初に作ったオブジェクトが一つ残っているのでヒエラルキーから消してしまいましょう。 そうするとフィールドに生成されるのが11個ではなく10個になるはずです。

これで立派とは言いませんが簡易的なゲーム?はできたのではないでしょうか?

少しコードは増えますが10個見つけだすまでの時間を測ったりなんかもできますね。

counter

スクリプトファイルをの一部を書き換えて

using UnityEngine;
using UnityEngine.UI;


public class counter : MonoBehaviour{

    public Text scoreText;
    private int score = 0;
    private float time = 0;

    void Update(){
        if (score < 10){
            time += Time.deltaTime;
        }
        scoreText.text = "Score:" + score + "\n" + "時間:" + time.ToString("f2") + "秒";
    }

    void OnTriggerEnter(Collider collider){

        if (collider.gameObject.tag == "Sphere"){
            score++;
        }

    }
}

こんな感じに書き換えるかコピペして起動すると。 f:id:mischief_cat:20200419172516p:plain 10個すべて消し終わったらタイマが止まるようになっています。
と、まぁ簡単なゲーム制作はできたと思います。

地形の生成

Terrainでフィールドだけは作ってあるので次に簡単な地形のつくりからを説明します。
長くなっているのでサクッと説明します。
フィールドの作成で作ったヒエラルキー上のTerrainを選択しインスペクターを確認すと
f:id:mischief_cat:20200422105248p:plain
赤枠左から
Create Neighbor Terrains:フィールドとして使用する範囲を広げられる(今回はすでに十分すぎる広さを確保できているので不使用)
Paint Terrain:フィールドのテクスチャを貼ることや高低差を作ることなどが出来ます Paint Tree:木を追加する
Paint Details:草などを追加する

まずテクスチャを追加してみましょう。 f:id:mischief_cat:20200422111840p:plain こんな感じに操作すると f:id:mischief_cat:20200422111954p:plain いい感じ。
先ほどと同じやり方で別のテクスチャを追加してブラシで塗ってみましょう。
f:id:mischief_cat:20200422112936p:plain 適当なブラシを選んで好きなように塗っていきましょう。
次に高低差を追加します。
f:id:mischief_cat:20200422113810p:plain 先ほどと同じようにブラシを選択して高低差を付けます。 英語でも書かれていますが左クリックで上にシフトキーと左クリックで下に高低差を付けられるようになっています。
木の追加をしていきます。 f:id:mischief_cat:20200422114942p:plain f:id:mischief_cat:20200422115225p:plain 草の追加をしていきます。 f:id:mischief_cat:20200422115813p:plain ブラシの設定を行い塗っていきます。
遠目で見ているので塗っても変わりがなくわからない場合がありますのでゲームを起動してみるとわかりやすくなります。
f:id:mischief_cat:20200422120626p:plain 少し草の背が高いので変えていきます。 f:id:mischief_cat:20200422121126p:plain これで高さがよくなりました。 ざっと説明しましたがこれで地形生成は終わりました。
ほかのアセットを使うことによってボタン一つで地形が作られたりもしますが自分で一から作りたい方にはお勧めです。

まとめ

昔Unityを触ったときは使い方も全く理解できなかったのに久しぶりに触ってそんな難しくないな。なんて思えるようになったので自分が少しは成長してるんだなって感慨深くなりました。
変わらないのは細かい設定や数値が表にバッと並んでるUIが苦手で初めて触ったときも情報量が多すぎてリタイアしてしまったので初心者には厳しいのかな?とは思います。(この方がやりやすい方もいますが)
プログラムの知識すら身についていない人にはUIの操作で手一杯になる印象はあるので初心者の方はあきらめずにやっていくと達成感は半端ないので頑張ってください。