【Unity】桜を咲かせてみた【初心者向け】

# Twitterにて
突然、こんなツイートが！
![unity_tweet.png](https://qiita-image-store.s3.amazonaws.com/0/26453/ce52f446-1307-8ba0-1937-98dca15da7a8.png)
自分もちょろっとやってみました。
結果から言うと出来てるか不安なのですが、こんな感じです。

![unitysakura.mov.gif](https://qiita-image-store.s3.amazonaws.com/0/26453/80165d82-0560-9b87-3862-bb690564cecf.gif)


今回はUnity5.0.0f4を利用して作成しています。
また、前回の○メハメハと比べて、少し作業が長いです。
じっくり、ゆっくりと進めていただければと思います。


# 1.projectを作成
Unityを起動して新規プロジェクトを作成します。
ここでは「Sakura」という名前にしました。

# 2.簡単な木を作ろう
木となる部分を作成します。
GameObject -> 3D Object -> Cylinder
で作成します。
縦にちょっと長い方がいいと思うので、
Scaleを x : 0.5 y : 1.5 z 0.5
ぐらいにして、名前を「Tree」とします。

![スクリーンショット 2015-03-14 13.52.58.png](https://qiita-image-store.s3.amazonaws.com/0/26453/c661e452-5d12-6967-c6b2-d050eab05eb3.png)



# 3.桜の満開な花を作ろう
桜の花を表現します。
簡単にHaloという機能で実装しちゃいます。

GameObject -> Create Empty

で追加して、名前を「Flower」とします。
そのFlowerのInspector下部にある、
Add ComponentでHaloを追加します。

そしてHaloの値を設定します。
Color : ピンクっぽければOK
Size : 2ぐらい

これが出来たら、Assetsの中にD&Dして、prefab化しておきます。
prefab化したら、Hierarchy内のFlowerは削除しましょう。

![スクリーンショット 2015-03-14 13.54.03.png](https://qiita-image-store.s3.amazonaws.com/0/26453/81b41183-1c87-408e-5c57-9fae376b598a.png)



# 4.桜の花びらを作ろう
桜の花びらが散るエフェクトを作成するための下準備として、
まず、花びら単体を作成します。
ここではこの画像を使用します。
(環境によっては見えないかもしれません。
桜の花びらを白で描画していて、周りを透過しています。
画像を保存してローカルで見てみてください。）

![sakura.png](https://qiita-image-store.s3.amazonaws.com/0/26453/129dce12-de9f-d92e-cf33-aa8d58be3b87.png)

この画像を保存した後、Assetsの中に入れます。
そして、TextureType : Sprite(2D and UI)
にして、Applyを押下してください。

![スクリーンショット 2015-03-14 13.54.57.png](https://qiita-image-store.s3.amazonaws.com/0/26453/d70a4fa3-46f5-84e1-6988-7d41cff71400.png)


そして、Material化を行います。
Assetsを右クリックなどしまして、
Create -> Material
そして、名前をsakuraMatとします。

![スクリーンショット 2015-03-14 13.55.10.png](https://qiita-image-store.s3.amazonaws.com/0/26453/1f65b933-2985-1d5e-4484-84f939a019b7.png)


そして、Albedoと書かれた所の左側の小さなマスに向けて、
sakuraの画像をD&Dします。

![スクリーンショット 2015-03-14 13.55.31.png](https://qiita-image-store.s3.amazonaws.com/0/26453/bc06e1b8-d935-ac5b-91c4-fb8c885e651b.png)



その後、shaderをStandardからSprites/Defaultに変更します。

![スクリーンショット 2015-03-14 13.55.42.png](https://qiita-image-store.s3.amazonaws.com/0/26453/ffd15b7a-7d05-6c04-b49e-76a11b242d20.png)



# 5.桜の花びらが散るエフェクトを作ろう
Particle Systemを利用して桜の花びらが散るエフェクトを作成します。
HierarchyのTreeを選択して、右クリックでParticle Systemを選択。
追加出来たら、名前を「SakuraTiruEffect」として以下の画像のように設定します。


![スクリーンショット 2015-03-15 15.31.03.png](https://qiita-image-store.s3.amazonaws.com/0/26453/146549f4-8453-ca06-f653-7fa76c18e54d.png)

![スクリーンショット 2015-03-15 15.31.21.png](https://qiita-image-store.s3.amazonaws.com/0/26453/3a950c5b-ffad-8002-a3ad-8be111c053da.png)


重要な所としては、
・MaterialをsakuraMatにする。
・Gravity Modifierに値を設定する。
・ShapeはConeで上から下に向かって散らすように向ける。
です。
その他の事はより桜が散っている感を出す作業になります。

# 6.桜が咲いた瞬間のエフェクトを作ろう

桜が咲いた時にパッと派手なエフェクトが付くように
そのエフェクトを別途作成します。

5.と同じようにTreeの下にParticle Systemを追加します。
そして、5.と同じようにパラメーターを以下のように設定します。

![スクリーンショット 2015-03-15 15.35.57.png](https://qiita-image-store.s3.amazonaws.com/0/26453/ff3308ac-4899-d31f-4b92-ed688e86920c.png)

![スクリーンショット 2015-03-15 15.36.07.png](https://qiita-image-store.s3.amazonaws.com/0/26453/551f277a-6b56-f0a8-2e5b-2cdf2a4e7059.png)

この中で特に重要なのはEmissionになります。
ここでは具体的な説明は省きますが、
興味があれば、調べてみてください。

[Unity マニュアル パーティクルシステム](http://docs.unity3d.com/ja/current/Manual/class-ParticleSystem.html)

# 6.当たり判定を作成しよう

Treeに何らかのオブジェクト(プレイヤーなど)が接触した時に
イベントを発生させたいので、当たり判定を作成します。
TreeにBox Colliderを設定し、以下のように設定します。

IsTrigger : true
size : x : 2 , y : 2 , z : 2

![スクリーンショット 2015-03-15 15.40.33.png](https://qiita-image-store.s3.amazonaws.com/0/26453/a4b83c42-633e-e15e-a53d-9ebcc259dd61.png)

# 7.ちょっと確認
現段階ではこのような感じになります。

![スクリーンショット 2015-03-15 15.44.02.png](https://qiita-image-store.s3.amazonaws.com/0/26453/8bc5ece1-5733-5f51-33b5-d235160c9bda.png)

# 8.スクリプトを作成しよう
6.で作成した当たり判定をトリガーにして、
桜が咲くスクリプトを作成します。
Assets右クリックでCreate -> C# Script
名前「SakuraCreater.cs]とします。

![スクリーンショット 2015-03-15 15.45.54.png](https://qiita-image-store.s3.amazonaws.com/0/26453/139bfdf4-f62d-b2fc-32b4-f546ecc44679.png)

スクリプトを開き、以下のように入力してください。

```cs:SakuraCreater.cs
using UnityEngine;
using System.Collections;

public class SakuraCreater : MonoBehaviour {
	
	public GameObject flower;
	public ParticleSystem sakuraSakuEffect;
	public ParticleSystem sakuraTiruEffect;
	// Use this for initialization
	void Start () {
	    sakuraSakuEffect.Stop();
	    sakuraTiruEffect.Stop();
	}
	
	/// <summary>
	/// BoxColliderのIsTriggerをONにしている際に、
	/// オブジェクトが範囲に入った際に呼ばれるイベント
	/// </summary>
	/// <param name="col">Col.</param>
	void OnTriggerEnter(Collider col){
		
		for(int i = 0 ; i < 5 ; i++){
			createSakura();
		}
		
		sakuraSakuEffect.Play();
		sakuraTiruEffect.Play();
	}
	
	/// <summary>
	/// 桜の花を一つ作成します。
	/// </summary>
	/// <returns>The sakura.</returns>
	private void createSakura(){
		Vector3 pos = this.gameObject.transform.position;
		
		float x = Random.Range(-1.0f , 1.0f);
		float y = Random.Range(1.0f , 2.0f);
		float z = Random.Range(-1.0f , 1.0f);
		
		pos.x += x;
		pos.y += y;
		pos.z += z;
		
		GameObject obj = Instantiate(flower , pos , Quaternion.identity) as GameObject;
		obj.transform.SetParent(this.gameObject.transform);
	}
}

```

# 9.スクリプトを木に設定しよう
8.で作成したSakuraCreaterをTreeにD&Dで設定します。
そして、パラメーターに以下のようにD&Dで設定します。
Flower : Assets内のFlower(prefab)
SakuraSakuEffect : Hierarchy内、Treeの下にある、SakuraSakuEffect
SakuraTiruEffect : Hierarchy内、Treeの下にある、SakuraTiruEffect

![スクリーンショット 2015-03-15 16.01.53.png](https://qiita-image-store.s3.amazonaws.com/0/26453/d95ac2b5-92ca-d41d-8b57-b68497df36ea.png)

# 10.プレイヤーを作成しよう
プレイヤーを作成します。
ここではSD UnityChanを利用します。

[SD ユニティちゃん 3Dモデルデータ](http://unity-chan.com/download/releaseNote.php?id=SDUnityChan)

特に指定はありませんので、何でもOKです。
実装は[この辺](http://qiita.com/kuuki_yomenaio/items/33cc2d234f3394bd0eab)を参考にしてみてください。
Cylinder辺りにCharacterController入れて以下のスクリプトを貼り付けるでもOKです。

```cs:CharacterMove.cs
using UnityEngine;
using System.Collections;

public class CharacterMove : MonoBehaviour {

	float forwardSpeed = 3.0f;
	float backwardSpeed = 1.0f;
	float rotateSpeed = 10.0f;
	CharacterController characterController;
	void Start () {
		characterController = GetComponent<CharacterController>();
	}
	
	void Update () {
		float v = Input.GetAxis("Vertical");
		float h = Input.GetAxis("Horizontal");

		Vector3 velocity = new Vector3(0, 0, v);
		velocity = transform.TransformDirection(velocity);
		if (v > 0) {
			velocity *= forwardSpeed;
		} else if (v < 0) {
			velocity *= backwardSpeed;
		}
		characterController.Move(velocity * Time.deltaTime);
		transform.Rotate(0, h * rotateSpeed, 0);
	}
}

```

# 11.実際に動かしてみよう
ゲームを再生してプレイヤーを動かしてTreeにぶつかってみましょう。
桜は咲けばOKです。
床つくったり、カメラいじってたり、Animatorカスタムしてたり、
sakuraを見えやすくしたりと
ちょっと色々いじってます。

以上ですべて完了となります。

最後に作成したプロジェクト一式をgithubにUp致しました。

[SakuraTestプロジェクト一式](https://github.com/jake1256/SakuraTest)

長過ぎました。
おつかれさまでした。