Unity(C#)超絶初心者の開発メモ

Unity歴3日のぼくのメモです。Unityでゲームを作って億万長者を目指しましょう。

# 環境
OSX 10.10.5
Unity 5.3.2
Xcode 7.2

# 覚えておきたいUnity Tips
①Unityでグラフィックやすべての設定などを行い、MonoDevelopでコードを書く
②Unityのカラムを2 by 3に変更すると見やすい
③AssetStoreを開くショートカットキーはCommand + 9
④GameシーンではQ、W、E、Rで拡大や回転などの切り替えができる
⑤alt(option)キーを長押ししながらトラックパッド2本指で画面上のカメラ操作が簡単にできる

# iOS向け設定
①File -> Build Settings -> iOSに設定
②Player Settings -> Landscapeなどの設定
③画面サイズの設定(横向きなら1136 * 640等)

<img width="424" alt="スクリーンショット 2016-02-08 20.28.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/46672/6c1bac42-9934-f519-4e56-9be34df321b7.png">

④Buildする
Xcodeのプロジェクトファイルが書き出されるので、Xcodeで開いて自分のiOS端末でRunすれば自分のiPhoneやiPadで自作ゲームが遊べます。

# BGMを入れる方法
①Hierarchyからカメラをクリック
②リソースフォルダに音源(mp3)をドラッグ&ドロップ
③音源(mp3)をCameraのInspectorにドラッグ&ドロップするとAudio Sourceが追加される
④BGMだけならこのままRunすれば再生される

<参考>
http://qiita.com/edo_m18/items/31771c2afc065d764fbf

# 効果音を入れる方法
①リソースフォルダに音源(mp3)をドラッグ&ドロップ
②効果音を発生させるオブジェクトをクリック
③「Add Component」を押してコンポーネントの追加
④AudioClipに音源をドラッグ&ドロップ

```csharp:効果音
// 変数宣言
private AudioSource audioSource;
public AudioClip audioClip;

private void playSound () {
	audioSource.PlayOneShot (audioClip, 1.0f);
}
```

# アニメーションを入れる方法
①AssetStoreからアニメーションをダウンロードしてリソースに入れる
②Inspectorからアニメーションを動画で確認できる
③Projectのところで右クリック -> Create -> AnimationController

<img width="541" alt="スクリーンショット 2016-02-08 21.54.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/46672/8879ecf3-0ce9-0842-c774-6771dca82d39.png">

④アニメーションを付けたいオブジェクトを選択し、InspectorのControllerに設定
⑤人間型の場合はHumanoid設定に変更

<参考>
https://www.youtube.com/watch?v=QJ2dY0Sjgoo

### Animatorの条件設定
AnimationControllerを作ってアニメーションを配置したら、transition(矢印)でアニメーションの順序をひも付けていく。矢印を右クリックしてアニメーションが呼ばれるタイミングについて設定することができる。アニメーションの呼び出しタイミングは以下の4種類。

|タイプ|役割|
|---|---|
|Float|小数の値によってアニメーション呼び出し|
|Int|整数の値によってアニメーションON/OFF切り替え|
|Bool|真偽値(true/false)によってアニメーションON/OFF切り替え|
|Trigger|値によらず命令を受け次第アニメーションON/OFF切り替え|

```csharp:HogeScript.cs
// 変数宣言
private Animator animator;

// 処理
public void sampleAnimation () {
	if (Input.GetKeyDown ("space")) {
		// Triggerの場合
		animator.SetTrigger ("spaceTapped");
		// 処理...
	}
}
```


# コードを書く
### ①C#のルール
|項目|ルール|
|---|---|
|命名規則|メソッド名はアッパーキャメル、変数名はローワーキャメル|
|コメント|/* ... */と//が利用可能|
|型の指定|右辺から明らかに型が分かる場合は型宣言せずvar宣言可|
|文字列|+で結合可能|
|配列の宣言|型の後に[]を付加。string[] nameArray = { "a", "b", "c" };|
|例外処理|throw/try/catch構文を使用|

### ②変数宣言

```csharp:変数宣言
// 修飾子 クラス/型 変数名;

// (例)
private AudioSource audioSource;
```

### ③修飾子
publicで宣言した変数や処理はUnityのオブジェクトに直接ひも付けることができる。

### ④メソッド
メソッドは処理のかたまりのこと。走ってジャンプする、のようなものを処理「superJump」のように定義することができる。

```csharp:メソッドの書き方
修飾子 戻り値の型 メソッド名 (引数の型 引数の仮変数名) {
	// 処理
}

// (例1)
// ※引数が複数ある場合はカンマで区切る
public double SampleMethod (double x, double y, double z) {
	a = x + y + z;
	return a;
}

// (例2)
// ※戻り値を特に指定しない場合は、戻り値の型を「void」とし、return文は不要。
private void SampleMethod () {
	// 処理
}
```

```csharp:メソッドの呼び出し
private void SampleMethod () {
	// ShowDebugLog()メソッドを直接呼び出してみる
	ShowDebugLog();
	
	// 間接呼び出し(1秒後にShowDebugLog()メソッドが呼ばれる)
	Invoke ("ShowDebugLog", 1.0f);
}

private void ShowDebugLog () {
	Debug.Log("called from SampleMethod");
}
```

### ⑤関連付けされたファイルの初期化
※あるオブジェクトに音やRigidBodyなどを関連付けていた場合の初期化

```csharp:オブジェクトの初期化
// 変数宣言
private Rigidbody rigidBody;
private AudioSource audioSource;

void Start () {
	// 自身のインスタンスのコンポーネントを取得して初期化
	rigidBody = this.GetComponent<Rigidbody> ();
	audioSource = this.GetComponent<AudioSource> ();
}
```

# エラー対処
### ①コンソールへの出力
```csharp:コンソール出力
Debug.Log ("hoge");
Debug.Log (number);
```

### ②ビルド時のエラー対処
Unityのコンソールに出力されたエラーをダブルクリックするとMonoDevelopの該当コードに飛ぶので、そこがヒントになる。