UnityOnWindowsはじめの一歩(2019/02)

・全く触ったことがないし環境構築もしていないけど、唐突にUnityで何かを作ろうと思った人向け
・Windows10想定

# VisualStudio2017の導入
★なにがうれしいか：各種お助け機能を提供してくれる、きわめて強力な統合開発環境(IDE)です。筆者はこれがないと一行も書けません。

さくっとGoogle先生からダウンロードページへ向かい、導入します。
![vs2017.png](https://qiita-image-store.s3.amazonaws.com/0/258725/b6485e77-5e96-6f8e-c2e5-e5b66145d705.png)
Communityは費用はかかりませんが、Microsoftアカウントの作成を行い紐づける必要があります。
→これをやっておかないと一定期間後に使えなくなり、割と面倒です。最初にやってしまいましょう。


# UnityHubをダウンロード
★なにがうれしいか：Unityエディタのバージョンセレクターです。アプリケーション作成開始後にUnityのバージョンアップがあったりすると、マシン内に色々なバージョンが混在しはじめゴチャゴチャしてきたりするのですが、そういった管理が容易になります。
![download.png](https://qiita-image-store.s3.amazonaws.com/0/258725/5e4ad384-e7cd-a65f-569b-e25a615e6083.png)

こちらも忘れたころに怒られると面倒なので、Unityアカウントを作ってログインしておくのがおすすめです。
![unityhub.png](https://qiita-image-store.s3.amazonaws.com/0/258725/57b2b707-bada-09a6-9d16-8f4d5d0a74e8.png)
Installsタブから任意のバージョンのUnityEditorをインストールできます。とりあえず新しいものを入れておくとよいです。
Projectタブから、Installsで導入したバージョンのUnityEditorを使用してアプリケーションを作成します。
![newproj.png](https://qiita-image-store.s3.amazonaws.com/0/258725/0abaae7d-b186-1449-ecd4-e49a4cc52812.png)
あなたの新規プロジェクトをよしなに作成してくれるので待機します。
Locationは初期状態ではUserディレクトリだった気がするのですが、お好みの場所にしておくと何かと楽かと思います。
![launched.png](https://qiita-image-store.s3.amazonaws.com/0/258725/7e0d6432-87d9-1714-e12b-c4c67b9df4ce.png)
しかるのち、You're on Unityとなります。

# 文字を表示させる
折角なので画面に何か表示させてみましょう。Hierachyウインドウにて右クリックし、Textを作成してみます。
![hier.png](https://qiita-image-store.s3.amazonaws.com/0/258725/c66df6e9-78f1-cfa5-aea5-954597186026.png)
新しいオブジェクトが生成されたかと思いますが、気にしないでください。ひとまず画面上部のPlayを押します。
![play.png](https://qiita-image-store.s3.amazonaws.com/0/258725/9fadfda0-19d9-73bf-857a-4286bdbe66db.png)
画像は省略しますが、切ない感じにテキストが表示されたかと思います。これが現在のあなたのゲームです。

# Inspectorを操作する
もう一度Playボタンを押すとデバッグが終了するので、Hierachyタブから生成されたTextを選択し、ちょっといい感じにしてみます。
選択されたオブジェクトはInspectorウィンドウで詳細を編集できます。
![textins.png](https://qiita-image-store.s3.amazonaws.com/0/258725/2917447e-1822-50b3-58ff-4fc68db7b625.png)
ここでは以下の操作を行っています。
1.XY座標を変更
→UIキャンバスにおいてどの位置にテクストを表示するか指定する項目です。今回は基準点(anchors)が画面の中央であるので、X0/Y0を与えると画面のど真ん中に来ます。
2.Text内容を変更
→日本語も打てます。
3.フォントサイズ、アラインメント
→文字を大きく、中央ぞろえに指定しています。

以上の通り編集を行った上で、再度Playを押します。
![youreon.png](https://qiita-image-store.s3.amazonaws.com/0/258725/bae49582-1452-998e-1857-929af36da09d.png)
無限に続く世界にテキストが浮かび上がっています。"Play Game"などの文言にし文字をクリック可能にしたりすれば、省力ゲームにありがちなタイトルスクリーンになります。

# ゲームオブジェクトを動かす
さて、ここまでのところ3Dでもなんでもなく、折角VSを入れたのにコードを一行も書いていません。何か動かしてみましょう。
Hierarchyにて右クリックし、3Dオブジェクトからキューブを作成します。豆腐が生成されます。
![cube.png](https://qiita-image-store.s3.amazonaws.com/0/258725/106e91cb-fa3e-aa3f-6765-d11c10812afd.png)
作成したキューブの座標を0,0,0に戻し、Playを押すと何かが存在しているのがご確認頂けると思います。カメラの位置によっては画角に入らないこともありえるので、座標は色々と試して頂ければと思います。3Dオブジェクトなので、カメラに映ったものしか見えません。

プロジェクトウインドウ内で右クリックしてコンテクストメニューを開きます。
FoldersからScriptsディレクトリを作成し、続いてC#スクリプトを作成します。
![creatingscript.png](https://qiita-image-store.s3.amazonaws.com/0/258725/a1f11368-52fe-769c-6eda-dba5d72d5f83.png)
このScriptsディレクトリ内にコード類を置くのが慣例となっています。
Resourcesディレクトリ以下には、画像などゲームアセットを設置しますが、今回は利用しません。

作成したスクリプトをダブルクリックなどで開き編集します。VSを使いましょう。
コードの内容は以下のようにします。

```

public class NewBehaviourScript : MonoBehaviour {
    // Use this for initialization
    void Start () {

    }
    // Update is called once per frame
    void Update () {
        // 画面が更新されるたびに、キーによる操作を受け付ける
        MoveByKey();
    }

    private void MoveByKey()
    {
        // このスクリプトがアタッチされている対象の位置情報を取得してtとする
        var t = this.gameObject.transform;

        // 押下されたキーによって位置を変更する
        if (Input.GetKey(KeyCode.RightArrow))
            t.Translate(0.05f, 0, 0);
        if (Input.GetKey(KeyCode.LeftArrow))
            t.Translate(-0.05f, 0, 0);
        if (Input.GetKey(KeyCode.DownArrow))
            t.Translate(0, -0.05f, 0);
        if (Input.GetKey(KeyCode.UpArrow))
            t.Translate(0, 0.05f, 0);
    }
}
```

作成したスクリプトを、HierarchyのキューブにD&Dします。
![dandd.png](https://qiita-image-store.s3.amazonaws.com/0/258725/9f52d6af-34d7-88ea-cffd-ddf5de2b2674.png)
これでスクリプトがアタッチされました。CubeのInspectorに、NewBehaviourScriptが追加されているのが確認できるかと思います。

これによりコード内でthis.gameObjectとして呼び出す対象が豆腐になりました。
つまり、矢印キー押下により豆腐が動きます。
![touhu.png](https://qiita-image-store.s3.amazonaws.com/0/258725/14f367d3-ace6-6bb5-27d1-2e5a6c768f53.png)

# まとめ
今回作ったものは、文字が表示され、ものが動かせるという、とても単純なもので、ゲームとも呼び難い代物です。
しかしながら、実際のところ我々がゲームを遊んでいる際に起こっている現象というのは、文字が表示され、ものが動き、音が鳴るという、それだけのことだったりします。

ここに、敵になる豆腐が存在していたとすればどうでしょうか。あるいは、ゴールと障害物を設置すればどうでしょうか。邪魔にならない場所に、自分の豆腐の体力を表示すればどうでしょうか。
もっとも重要なことは、ルールを定めることです。あなたのゲームでユーザーがある操作をすると、それはプレイヤーにとってなにがうれしいのか。なにがうれしくないのか。ゲームのデザインが存在しなければ、それはサンプルでしかありません。

ゲームのデザインから「何が起こるのか」を切り出し、機能に落とし込んでいくことで、ゲームデザイン（そして何よりも、あなたの情熱）は現実になります。
Unityはその道筋を非常に容易にしてくれる優れたツールです。先人の業績も無数にあり、少し調べれば大抵のことは実現できます。ぜひ、活用していきましょう。

この記事があなたの最初の入り口としてお役に立ったならば幸いです。それでは。

# 先人の業績
### 知識系
★すべてこれで解決
https://www.google.co.jp

★入門から高度な内容まで
http://tsubakit1.hateblo.jp

★そしてもちろん
https://qiita.com

★以下、英語ながら動画（見ながらハンズオンはオススメ）
https://www.youtube.com/user/quill18creates
https://www.youtube.com/channel/UCFK6NCbuCIVzA6Yj1G_ZqCg

### コンテンツ系
★フリーからプロフェッショナル系まで
https://assetstore.unity.com

★アイコンなどGUIアセット欲しいけどイラレは起動したくないあなたへ ※ライセンスは要確認
https://opengameart.org

★モデルや立ち絵など欲しいけど絵orモデリングが進捗しないあなたへ（プレースホルダとして重宝しています）
http://unity-chan.com

★音楽から画像まで、素材販売にて才能を発揮する皆様に頼ってみるのもアリ
https://www.dlsite.com