# おじさんのUnity勉強会事前資料
## 目次
1. [インストール](#1-インストール)
2. [プロジェクトを作成する](#2-プロジェクトを作成する)
3. [ゲーム開発の手順](#3-ゲーム開発の手順)
4. [最後に](#4-最後に)
[<div style="position:fixed;background-color: white;border: solid #777;height: 8rem;width: 8rem;border-radius: 4rem;text-align: center;display:flex;align-items:center;justify-content:center;bottom:16px;right:20px;font-size:0.8em">目次に戻る</div>](#目次)
## はじめに
Unityについて基礎基礎の基礎から教えてあげよう
勉強会の前にUnityについてさっぱりな人は読んでおいてほしい
この資料は勉強会当日には使わないのであしからず
## 1. インストール
Unityを使ったことがない人はまず下からUnityをインストールしよう!
「俺知ってるんですよ~」っていう人は次項まで移動してね→[ココ](#2-プロジェクトを作成する)
### UnityHubのインストール
https://unity3d.com/jp/get-unity/download
[](https://unity3d.com/jp/get-unity/download)
ダウンロードして起動したらHubのインストール画面になるよ

利用規約に同意してから次にどんどん進めていけばすぐにUnityHubのインストールは終るゾ
インストールが終わったらサインイン画面が出るゾ
UnityIDを持ってる人はそのままサインインしてね!
持ってない人は下のIDを作成のところを押してIDを作ってね!

---
### Unity本体のインストール
サインインが終わったらUnity本体をインストールするゾ
UnityHubのインストールの欄からバージョンをインストールするゾ
<br>
<small>左の欄を選んでから</small>

<small>インストールボタンを押す</small>

<br><br>
今回は最新のLTS版 2020.3.20f1(LTS) をインストールするゾ

Unityで作ったアプリを動かすデバイスのモジュールを選ぶよ

Androidなら Android Build Support
iPhoneなら iOS Build Support
ブラウザならWebGL Build Support
という感じ
### これでインストールは終わり!
<br><br><br>
[目次に戻る](#目次)
## 2. プロジェクトを作成する
### ではまずプロジェクトを作ってみよう!

プロジェクトから新規作成を選び、テンプレート・プロジェクト名・保存先を決める

テンプレートは特に何もなければ3Dのまま、プロジェクト名は何でもいいゾ
---
### プロジェクトエディタのUI

エディタのUIについてかんたんに説明するゾ
エディタのUIは基本的にウィンドウの組み合わせで、それぞれのウィンドウの配置は自由に変えることができる。
- **エディタ全体の上部**
上にメニューバーがあり、そして左にシーンで使うギズモの選択、中央にシーンの再生停止ボタン、右にアカウントメニューとレイヤーごとの表示非表示とUIのレイアウト切り替えができる。
- **ヒエラルキー**
ゲームのシーン上にある物体の一覧で、ここからオブジェクトの生成もできる
- **インスペクター**
オブジェクトの中身、コンポーネントの一覧で数値をいじったりすることで座標を変えたりいろいろできる
コンポーネントとは、物体に追加する機能のことで速度や当たり判定から見た目やスクリプトまでほぼすべてのUnityの機能はこれに含まれる
- **プロジェクト**
プロジェクト内のディレクトリ構成、ファイルやフォルダをいじったり作成したりできる。プロジェクトで使うオブジェクトをここに保存しておける
- **コンソール**
Unity内で発生するエラーや警告、ログを表示するところ。デバッグするときにプログラム中でログを残せばコーディングに役立つ。**とても重要** ←
- **シーン**
ゲーム内の空間を外から覗ける。座標を動かしたり、回転させたりすることもできる。実際のゲーム画面ではない
- **ゲーム**
実際にゲームをプレイするときに映る画面。
これら以外にもUnityで使うウィンドウはたくさんあるがとりあえずUIで説明するところはここまでだゾ。
### おすすめの環境設定
環境設定を変更するためには、右上のEdit > Preferences (日本語なら編集>環境設定)を選択する
これが環境設定の画面

表示を日本語に変えたいならLanguageにある項目Editor Languageを日本語にすることで日本語表示に変更することができるゾ
テキストエディタを変更するには 外部ツール > 外部ツールのスクリプトエディタから好きなテキストエディタを選択する。選択肢になければブラウズより実行ファイルを選択する。VSCodeならVSCodeを選択したあと引数をリセットするといいゾ
おすすめのテキストエディタ VSCode
https://azure.microsoft.com/ja-jp/products/visual-studio-code/
## 3. ゲーム開発の手順
### 大まかな開発の流れ
大まかな開発の流れとしては
1. [フォルダ・ディレクトリの構成を整える](#31-フォルダ・ディレクトリの構成を整える)
2. [シーンを作成する](#32-シーンを作成する)
3. [必要なゲームオブジェクトを追加する](#33-必要なゲームオブジェクトを追加する)
4. [コンポーネントを追加・スクリプトの編集をする](#34-コンポーネントを追加・スクリプトの編集をする)
5. [必要なアセットを作成する](#35-必要なアセットを作成する)
6. [ゲームを再生しデバッグを行う](#36-ゲームを再生しデバッグを行う)
7. [結果に基づいて再度2~6を繰り返す](#37-結果に基づいて再度2~6を繰り返す)
こんな感じ
それじゃ、上の開発の流れを踏襲して簡単なゲームを作ってみよう。
### 3.1 フォルダ・ディレクトリの構成を整える
まずは開発しやすいようにフォルダを作成していくゾ

プロジェクトの Assets内にフォルダを複数作成する
作成するフォルダ名は
- Scripts
- Prefabs
- Materials
- Textures
### 3.2 シーンを作成する
次にシーンを作成するゾ

プロジェクトの Assets > Scenes内にシーンを作成する
シーン名は任意に決めてね
そしたら作成したシーンをダブルクリックしてシーンを切り替える


ヒエラルキーに表示されているシーンが変わっているのを確認する
### 3.3 必要なゲームオブジェクトを追加する
ここで簡単にゲームオブジェクトの生成方法を教えるゾ

ヒエラルキーから右クリックで新しいオブジェクトを生成できるゾ
色んな種類のオブジェクトのテンプレがあるからそこから選んでね
オブジェクトを消したい場合はヒエラルキーからオブジェクトに対して右クリック、削除を選択すると消せるゾ
### 3.4 コンポーネントを追加・スクリプトの編集をする
#### コンポーネントの追加方法
コンポーネントの追加方法を教えよう

インスペクター内の最下部にコンポーネントを追加するボタンがあるゾ
ここから必要な機能を選んで追加していくゾ
試しに速度を扱う機能を追加する
コンポーネントを追加から、物理 > リジッドボディを選択すると速度が追加されるゾ
動かしてみると重力によって下に落下していくのが分かるゾ
重力はインスペクターのリジッドボディの欄から重力を使用しないように変更できるゾ
#### スクリプトの作成・編集方法
スクリプトを作成するには、プロジェクト内で右クリック、作成 > C#スクリプトを選択するとスクリプトが作成されるゾ

スクリプトは基本的にAssets > Scripts内に入れておくこと。
そして編集するにはプロジェクト内のスクリプトのファイルをダブルクリックする
するとこんな感じにテキストエディタでの編集画面に移動するゾ
(画像ではエディタをVSCodeに設定している)

スクリプトの中にはデフォルトでクラス名や関数が用意されているゾ
そして基本的にこの2つの関数の中にコードを書き加えていくゾ
それぞれの役割は
- void Start()
オブジェクトが読み込まれて最初に一回動作する関数
- void Update()
オブジェクトが読み込まれた後に毎フレーム動作する関数
試しに中にコードを書き加えてみよう
```
void Start()
{
GetComponent<Rigidbody>().AddForce(new Vector3(0,500,0));
}
void Update()
{
if(transform.position.y<0){
GetComponent<Rigidbody>().velocity=new Vector3(0,5,0);
}
}
```
コードを書いても、このままでは動かないんだゾ
スクリプトを動かすには、オブジェクトにコンポーネントとして追加する必要があるゾ

このようにプロジェクトからスクリプトのファイルをインスペクターにドラッグ&ドロップで追加できる
(インスペクターのコンポーネントを追加からスクリプトを選択することでも可能)
実際に動かしてみると立方体の挙動が変わっている事がわかる(変わっていない人はやり直し!)
[ゲームを再生する方法](#ゲームを再生する)
先程のコードを解説すると、
```
void Start()
{
// この関数の中は1度だけ行われる
GetComponent<Rigidbody>().AddForce(new Vector3(0,500,0));
// 1.GetComponent<>()で速度Rigidbodyを呼び出している
// 2.RigidbodyのメソッドAddForceで力(ベクトル(0,500,0))を加えている
}
void Update()
{
// この関数の中は毎フレーム行われる
// まずif文でオブジェクトの座標transform.posisionの高さyが0未満の時だけ動作させる
if(transform.position.y<0){
GetComponent<Rigidbody>().velocity=new Vector3(0,5,0);
// 1.GetComponent<>()で速度Rigidbodyを呼び出している
// 2.Rigidbodyの速度ベクトルを直接、ベクトル(0,5,0)に変更している
}
}
```
こんな感じ
### 3.5 必要なアセットを作成する
#### アセットとは?
アセットとは、Unityのプロジェクト内に入れる画像や3Dモデル、スクリプトなどのファイルを指す。
#### 追加のやり方
外部で作ったアセットを追加するには、FinderやエクスプローラーからUnityのプロジェクト内にドラッグ&ドロップで追加できるゾ
### 3.6 ゲームを再生しデバッグを行う
#### ゲームを再生する
ゲームを再生するには、画面上部中央にある再生ボタンを押す

#### デバッグする
デバッグをするときにはコンソールを使うゾ

必要な情報をコンソールに出力させることでコーディングを楽にすることができるゾ
コンソールにログを出力するには以下のコードを関数の中に挿入してね
```
Debug.Log("ここにオブジェクトや数値を入れる");
```
例えばゲームオブジェクトの座標を知りたいときは以下のように書く
```
Debug.Log(transform.position);
```
こんな感じでログを活用してコーディングしてね
### 3.7 結果に基づいて再度2~6を繰り返す
以上の結果から少しずつ理想の結果に近づけていってね
[ゲーム開発の手順に戻る](#3-ゲーム開発の手順)
# 4. 最後に
これで最低限の知識は教えられたと思う。
次の勉強会ではUnityつよつよになるためにUnityのチュートリアルゲーム制作に沿ってUnityで必要になる概念(オブジェクト指向とか四元数とか)や使えるテクニックを教えていくゾ。
覚悟の準備をしておいてください!!!いいですね!!!!!!!!