LoginSignup
19
18

More than 5 years have passed since last update.

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

Posted at

Twitterにて

突然、こんなツイートが!
unity_tweet.png
自分もちょろっとやってみました。
結果から言うと出来てるか不安なのですが、こんな感じです。

unitysakura.mov.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

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

4.桜の花びらを作ろう

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

sakura.png

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

スクリーンショット 2015-03-14 13.54.57.png

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

スクリーンショット 2015-03-14 13.55.10.png

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

スクリーンショット 2015-03-14 13.55.31.png

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

スクリーンショット 2015-03-14 13.55.42.png

5.桜の花びらが散るエフェクトを作ろう

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

スクリーンショット 2015-03-15 15.31.03.png

スクリーンショット 2015-03-15 15.31.21.png

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

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

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

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

スクリーンショット 2015-03-15 15.35.57.png

スクリーンショット 2015-03-15 15.36.07.png

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

Unity マニュアル パーティクルシステム

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

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

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

スクリーンショット 2015-03-15 15.40.33.png

7.ちょっと確認

現段階ではこのような感じになります。

スクリーンショット 2015-03-15 15.44.02.png

8.スクリプトを作成しよう

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

スクリーンショット 2015-03-15 15.45.54.png

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

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

10.プレイヤーを作成しよう

プレイヤーを作成します。
ここではSD UnityChanを利用します。

SD ユニティちゃん 3Dモデルデータ

特に指定はありませんので、何でもOKです。
実装はこの辺を参考にしてみてください。
Cylinder辺りにCharacterController入れて以下のスクリプトを貼り付けるでもOKです。

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プロジェクト一式

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

19
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
18