【Unity】導入・基本チートシート

## はじめに

Unityのチートシートを作りました。

自分用のメモです。

## 環境構築

- 以下のURLからUnityHubをダウンロードします

　https://unity.com/ja/download
 
- テンプレートの選択画面で2Dを選択します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633035/d3b4caf4-abb9-2280-6c9e-32bbd0942740.png)

- 右下の「プロジェクトを作成」をクリックすると編集画面が起動します
 

## レイアウト調整
- レイアウトを以下の手順で調整します
- ウィンドウ＞レイアウト＞2x3を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633035/6922d0bb-12bb-21f9-7d42-0d475c526617.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633035/210f32e3-66a1-cafa-ab39-324483a94d4e.png)


## プロジェクトとヒエラルキーの概要
#### プロジェクト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633035/8a355a5b-3189-01d9-07c0-70019e9479b0.png)

#### ヒエラルキー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633035/0a6c1f81-94ae-c5eb-2e22-1cbe159fce68.png)


## C#構文

### 基本構文
```C#
using UnityEngine; // 脳死
using UnityEngine.UI; // 脳死

public class DummyClass : MonoBehaviour // 覚えるものではないが一生覚えられない
{
    // フィールド（要素、変数）
    public int a;
    private int a;
    [SerializeField] int a; // 実質privateだがインスペクターに表示される
    
    public int[] a; // 配列 // インスペクターから設定することもできます
    public string[,] a = new string[,]{{"a11", "a12"},{"a21", "a22"}}
    public List<int> a = new List<int>(); // リスト
    public static const int A // 定数

    // 最初に強制実行されるメソッド（コンストラクタではない）
    void Awake(){  } // Startの前に実行される。オブジェクトが非活性では実行されない
    void Start(){  } // オブジェクトが非活性では実行されない

    // メソッド（関数、ファンクション）
    public void dummy(int a){  } // 自分で作るメソッドは先頭小文字

    // enum
    public enum DummyEnum // 滅多に使わないので一生覚えられない
    {
        A, B, C, D
    }
}
```

### キー入力系
```C#
void Update()
{
    if(Input.GetKeyDown(KeyCode.A)){  }// １つ
    if(Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.S)){  }// 同時押し
}
```

### GameObject操作
```C#
public GameObject gameobject

void hoge()
{
    gameobject.SetActive(true); // オブジェクト有効化
}
```

### GetComponent
```C#
public Sprite spriteDummy;

GetComponent<Button>()
GetComponent<Image>().sprite
GameObject.FindGameObjectWithTag("aaa").GetComponent<Image> // タグで取得
```

### 画面遷移
```C#
using UnityEngine.SceneManagement;

void ChangeScene(string sceneName) {
    SceneManager.LoadScene(sceneName); // 指定したシーンに画面遷移
}
```

### ボタンを押したときに呼ばれるメソッドを登録
```C#
void Start()
{
    // ボタンを押したときに呼ばれるメソッドを登録
    void Start(){
        GetComponent<Button>().onClick.AddListener(test);
    }

    // 呼ばれる
    public void test(){
    }
}
```

### Amimator系
```C#
public Animator anim;
anim = GetComponent<Animator>();
// 追記予定
```

### 音系
```C#
public AudioSource audioSourceBgm;
public AudioClip soundBgm;

public AudioSource audioSourceSe;
public AudioClip soundSe;

public void test()
{
    audioSourceBgm.clip = soundBgm; // BGM
    audioSourceBgm.Play(); 
    audioSourceBgm.Stop();
    
    audioSourceSe.PlayOneShot(soundSe); // SE ループさせずに1回だけ音を出す
}
```

### スライダー
```C#
private Slider speedSlider;

public void test(){
    speedSlider = GetComponent<Slider>();
    speedSlider.value = 1;
}
```


## クラス図
- 自分はクラス図を作る工程を省略することが多いです。
- 基本的に以下の記事のイメージで良いです。
https://note.com/midorigamegame/n/nfe505bcd69ab
Manager → Controller → Group, Parts, Item, Paramater, Status, etc..

## イベントを引数にする
https://qiita.com/Yamara/items/334c3f4d2cb97f91bd4f
public UnityEvent[] OnUnityEvent;


## セーブデータ作り方
工事中

## ビルド設定
工事中

## アセット
工事中

## エディタをVSCode化
工事中

## 画像サイズ
Unityは、表示端末の解像度に関係なく、「10ユニット」、「縦に」表示する仕組み、と言いましたが、これはMain Cameraを選択すると、「Size」の所に定義されています。
この値の2倍、5x2=10ユニットが、縦に表示されるサイズとなります。
もっと高解像度にしたい場合は、このSizeを変更してみて下さい。

## VS Codeのエディタが緑文字にならなくて何か変
C#のバージョンを2より前に戻すと治る

## アウトラインを表示したい
左側のアクティビティバーから「エクスプローラ」を選択します。
「エクスプローラ」の下部にある「アウトライン」をクリックします。

### 参考資料
https://hiyotama.hatenablog.com/entry/2015/06/12/153523


https://qiita.com/U-MA/items/996ae933ae94c5711883



https://qiita.com/aiandrox/items/f2f93a68a22bd460d3f4

- 読みやすい。参考にしたい

https://qiita.com/keyoris/items/cac1de91badf30b1b409



- こうしてください
- なぜならこうだから
- そのなぜならの8W3Hについて詳しく
- 余計なことを書かない方法

https://qiita.com/t12u/items/8c28484100dfd3a6351b