Unity入門 ブロック壊しの作成

# 簡単なブロック壊しの作成
unityにまったく触れた事がなくても、取り掛かりやすそうなブロック壊しのゲームを作成した。
備忘録も兼ねて投稿する事にした。
## 参考サイト
* [ブロック壊しの作り方動画](https://www.youtube.com/watch?v=muOOLwfbjfs&t=1012s)
* [物理演算マテリアルの使い方](https://docs.unity3d.com/ja/2018.4/Manual/class-PhysicMaterial.html)

## オブジェクトの配置
上のタブにあるGameObject/3D Object/Cubeを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/fa081ac8-7d00-9dcf-70d6-d6fa9233c09f.png)

## オブジェクトの形を変える
オブジェクトを配置し、配置したオブジェクトを選択する
選択すると右にコンソールが出てくる。
オブジェクトを直接操作して形を変えることもできるが、今回はコンソールから形を変える。
右のコンソールの**Transfom/scale**のx,yの値を変えて大きさを変える。
今回はx = 10,y = 1,z = 15とする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/a55ff5a2-bf38-0be5-5b6a-ad608a5f0291.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/5de3ffbc-46af-fe00-a6af-d9dfe14cb1cb.png)

## カメラの調整
オブジェクトが設置出来たら、次はカメラの調整を行う
まず、カメラを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/19dfa267-5ba2-8830-e158-325c2590c4d9.png)
右下にある、カメラからの視点を参考にカメラを動かしていく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/995ea329-9efc-9b0d-a9a4-123a4a1cf1b7.png)

## 壁の設置
床を設置したときと同じように、cubeを追加する。
zの値を15にし、床と合わせる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/f81b1bc9-62b1-3a5a-da80-8744c2ec236c.png)
左のオブジェクトコンソールから、壁をコピーしスライドさせる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/618fca88-1539-ff07-38bd-66d43fe59a3f.png)
上下の辺も同じ工程を繰り返す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/751d53cc-f28e-dbc3-492f-7b1ca1fe1d45.png)

## plyer、ballの設置
今までと同じようにオブジェクトを追加、変形させる。
**球は3DオブジェクトのSphereから追加する。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/a8d4b0e5-0c49-eaa0-9f36-9b7a422c9238.png)

## マテリアルの設定
いまのままだと色が何もついていないので、色をつける作業をしていく。
下にあるプロジェクトの部分を右クリックし、**create/material**を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/105ee3e7-12f9-deb6-be61-061775f1bd87.png)

赤く囲まれている所で色を変更する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/a0d74aca-3c4e-63f1-a5e2-805626deb5fd.png)

オブジェクトのmaterialの欄に、作成したmaterialをドラッグする。
ボールも同じように色を付ける。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/f1dbe1ff-61f2-82e9-1158-8483e8d825a5.png)

## 物理演算
### ボールが落下する動作
物理演算をするオブジェクトを選択し、**component/physics/Rigidbody**をクリック。
ボールを上に上げて、再生するとボールが落ちる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/5151e592-2bbd-9510-2c60-a429b547a5d7.png)

### 物理マテリアル(跳ね返り)を設定
**create/physics/material**を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/0b7eadf7-15a0-5e0a-45bc-634f82f1ae1f.png)
それぞれの数値を変える。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/096b3610-ebc0-b642-6195-10ade3f47ee2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/9cd70dd7-bd54-b621-8b80-569a1a2eb8af.png)

#### 項目の意味
* **Dynamic Friction**
移動している物体に対する摩擦。通常は、0 から 1 の間の値を使用します。0 の場合、氷のような感じになります。1 の場合、強い力や重力がオブジェクトを押さない限り、すぐに止まります。

* **Static Friction**	
面上で静止しているオブジェクトに使用される摩擦。通常は、0 から 1 の間の値を使用します。0 の場合、氷のような感じになります。1 の場合、強い力を加えないとオブジェクトは動きません。

* **Bounciness**
表面にどれだけ弾性があるか。0 の場合は弾性がありません。1 の場合はエネルギーが減ることなく跳ねます。シミュレーションには少量のエネルギーを加えるかもしれませんが、ある程度の近似が予想されます。

* **Friction Combine**	
衝突するオブジェクト間の摩擦をどう処理するか。
    * **Average**	2 つの摩擦力が平均化されます。
    * **Minimum**	2 つの摩擦力のうち小さい方の値が使用されます。
    * **Maximum**	2 つの摩擦力のうち大きい方の値が使用されます。
    * **Multiply**	2 つの摩擦力が互いに乗算されます。
* **Bounce Combine**	
衝突するオブジェクト間の跳ね返し度合いをどう処理するか。Friction Combineと同じです。

### 物理マテリアルの実装
**Sphere Colliderのmaterial**に、作ったmaterialをドラッグする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/39936cad-1548-3850-db2b-b8f40b9f95a8.png)

動かない軸を決める。
今回は、Y軸に動いてほしくないから、
Freeze PositionのYにcheckをつける。
また、回転はいらないのでFreeze Rotationは全てにチェックを付ける。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/e13c3aac-de0d-c83c-5f73-774172ed70e1.png)

## コードを書く
**createからC# scriptを選択**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005125/c0dded19-6323-4768-efc4-4d4b1568d2b9.png)

### playerの動き
キーボードを押すとブロックが左右に移動するようにしたい。

```C#:player
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class player : MonoBehaviour
{
    public float speed = 1f;//スピード
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.D))
        {
            if (this.transform.position.x > -5.5)
            {
                this.transform.position += Vector3.left * speed * Time.deltaTime;
            }

        }
        if (Input.GetKey(KeyCode.A))
            if (this.transform.position.x < -0.75)
            {
                this.transform.position += Vector3.right * speed * Time.deltaTime;

            }
        {

        }
    }
}
```