top of page

3Dアクションゲーム編

Lesson6 クオリティを上げよう

 ここからはゲームのクオリティアップには欠かせない、音やエフェクトを実装していきます。スクリプトをあまり書かないパートなので気軽にチャレンジしてみてください。

6-1

6-1 BGMを再生

6-1 BGMを再生

1

BGM素材を
​インポート

 無音のままではゲームとして寂しいのでBGMを再生してみましょう。インゲーム中に再生するための好きなBGMを用意してください。ループ再生に対応しているものを推奨します。ファイル形式はmp3、ogg、wavあたりが対応しています。

【サンプルで使用しているBGM】https://maou.audio/game_village05/

​ 好きな素材を用意できたらSoundフォルダを作成して、BGM素材をドラッグ&ドロップしてください。

2

再生方式を変更

 Unityにおいてmp3などのサウンドファイルは「オーディオクリップ」と呼ばれます。追加したオーディオクリップを選択して、再生方式をストリーミング再生に変更してください。

 デフォルトのDecompress On Loadはサウンドを全て読み込んでから再生する方式で、Streamingは序盤だけ最初に読み込んで、再生しながらその後のデータをロードしていく方式です(Youtubeの再生バーをイメージするとわかりやすいと思います)

 SEと異なりBGMファイルはサイズが大きいので、全てを読み込んでいると再生開始までに時間がかかってしまいます。

3

Audio Sauceを
​追加

 設定変更後にはApplyボタンを押してください。

 後はBGMを設定するだけです。MainシーンのGameオブジェクトにAdd ComponentからAudio Sauceをアタッチしてください。Audio Sauceは名前の通り音の発生源となるコンポーネントです。

4

BGMとループの
​設定

 追加されたAudioSourceのAudioClipに先ほど追加したBGMファイルをドラッグ&ドロップしてください。

​ PlayOnAwakeとLoopにチェックを入れておいてください。

 PlayOnAwakeは最初に自動で再生を開始するかどうかの設定、Loopは文字通りループ再生するかどうかの設定です。

 設定できたら実行してBGMが再生されることを確認してみてください。

 解説ではMainシーンの設定のみ行いますが、同じように他のシーンにBGMを設定してもOKです。

6-2

6-2 SEを再生

6-2 SEを再生

1

SE素材を
​インポート

 次は効果音を再生してみましょう。解説ではジャンプ音、星の取得音、大砲の発射音の設定のみ行います。どれも頻繁に鳴る音なので短い音がオススメです。

 BGMと同じように効果音素材を用意してください。

​【サンプルで使用しているジャンプ音】https://maou.audio/se_system33/

【サンプルで使用している星の取得音】https://maou.audio/se_system47/

【サンプルで使用している大砲の発射音】https://maou.audio/se_battle_explosion03/

​ こちらも素材を用意できたらSoundフォルダ内にドラッグ&ドロップしてください。

2

ジャンプ音再生の
​準備をする

 効果音のオーディオクリップに対しては特に設定は必要ありません。

 ユニティちゃんを選択してAudioSourceを追加してください。

 AudioClipにはジャンプの効果音を設定し、PlayOnAwakeとLoopのチェックは両方外してください。

3

ジャンプ音を再生

4

効果音再生用
​オブジェクト作成

 後はジャンプの瞬間にAudioSourceを再生するだけです。

​ Playerスクリプトを開いて赤い部分のコードを追加してください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

 

public class Player : MonoBehaviour
{
    public float MoveSpeed = 0.01f;
    public float JumpPower = 6.0f;

 

    Rigidbody m_rigidBody;
    Animator m_playerAnimator;
    GameObject m_mainCamera;
    AudioSource m_audioSource;

 

    // 接地判定用スクリプト
    public GroundChecker Ground_Checker;

 

    bool m_moveFlag, m_jumpFlag, m_airFlag;
 

    void Start()
    {
        // 自分にアタッチされているRigidBodyを取得する
        m_rigidBody = GetComponent<Rigidbody>();
        // 自分にアタッチされているAnimatorを取得する
        m_playerAnimator = GetComponent<Animator>();
        // 自分にアタッチされているAudioSauceを取得する
        m_audioSource = GetComponent<AudioSource>();

        // メインカメラのゲームオブジェクトを取得する
        m_mainCamera = Camera.main.gameObject;
    }


 

~中略~
 

        // ジャンプ
        if (Input.GetKeyDown(KeyCode.Space) && Ground_Checker.GetIsGround())
        {
            m_rigidBody.AddForce(new Vector3(0.0f, JumpPower, 0.0f),
                ForceMode.VelocityChange);
            m_jumpFlag = true;
            // 効果音を再生

            m_audioSource.Play();
        }

【プログラムの解説】

・今までと同じように自身にアタッチされたAudioSourceをGetComponentで取得しています。

​・AudioSourceのPlay関数でAudioClipを再生することができます。

 これでジャンプの効果音が再生されます。実際にプレイして確認してみてください。

 星の取得音も再生してみましょう。ジャンプと同じように再生したいところですが、星は取得すると消えてしまうので、星にAudioSourceをつけても取得した瞬間に一緒に消えてしまいます

 そのため、星を取得した瞬間に効果音再生用のオブジェクトを生成する必要があります

 また、効果音再生用のオブジェクトは、効果音の再生が終わったら自動で消えるようにしないとシーン上にずっと残り続けてしまいます。無駄なオブジェクトが残っているとゲームが重くなる原因になってしまうので、自動で消える処理も実装しましょう。

​ それでは効果音再生用のオブジェクトを作ります。

 空のオブジェクトを追加して、名前を「OneShotSE」にしてください。

 OneShotSEにAudioSourceをアタッチしてください。

 PlayOnAwakeとLoopにはチェックを入れないようにします。​それ以外は何も設定しなくてOKです。

5

効果音再生用の
​処理を実装

 新しいスクリプトOneShotAudioClipを作成します。以下のように入力してください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

 

public class OneShotAudioClip : MonoBehaviour
{
    AudioSource m_audioSource;
    bool m_IsPlay = false;

 

    public void PlaySE(AudioClip audioClip)
    {
        // 自分にアタッチされているAudioSourceを取得
        m_audioSource = GetComponent<AudioSource>();

        // オーディオクリップを設定
        m_audioSource.clip = audioClip;
        // 再生
        m_audioSource.Play();
        // 再生フラグを立てる
        m_IsPlay = true;
    }

 

    void Update()
    {
        // 再生フラグが立っていて、オーディオソースの再生が終わったら…
        if(m_IsPlay && m_audioSource.isPlaying == false)
        {
            // 自身を削除する
            Destroy(gameObject);
        }
    }
}

 OneShotAudioClipをOneShotSEにアタッチしてください。最終的にインスペクターはこのようになります。

6

プレハブ化する

 ここまで進んだらOneShotSEをプレハブ化してください。プロジェクト内のPrefabフォルダにOneShotSEをドラッグ&ドロップします。

 プレハブ化できたらヒエラルキー内のOneShotSEを削除してください。

7

星の取得音を
​再生する

 次はStarObjectスクリプトにOneShotSEを生成する処理を追加します。赤い部分のコードを追加してください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

 

public class StarObject : MonoBehaviour
{
    StarCount m_starCount;

 

    // 取得時の効果音
    public AudioClip StarGetSE;
    // 効果音再生用オブジェクト
    public GameObject OneShotPrefab;

 

    void Start()
    {
        // Gameという名前のオブジェクトを検索する
        GameObject gameObj = GameObject.Find("Game");
        // 検索したオブジェクトからStarCountコンポーネントを取得する
        m_starCount = gameObj.GetComponent<StarCount>();
    }

 

    void Update()
    {
       // Y軸周りに回転する
       transform.Rotate(0.0f, 0.2f, 0.0f);
    }

 

    private void OnTriggerEnter(Collider other)
    {
       // もし自身と衝突したオブジェクトのタグがPlayerだったら…
       if (other.CompareTag("Player"))
        {
            // 取得時の効果音を再生
            GameObject oneShotObj = Instantiate(OneShotPrefab);
            oneShotObj.GetComponent<OneShotAudioClip>().PlaySE(StarGetSE);

 

            // ここで星を取得する処理を書く
            m_starCount.StarAdd();

 

            // デバッグ:獲得した星の数を表示
            //Debug.Log(m_starCount.GetNowStarCount());

 

            // 自身を削除する
           Destroy(gameObject);
        }
    }

}

8

使用する効果音を
​設定する

【プログラムの解説】

​・Instantiate関数は引数にしたオブジェクトを生成する関数です。自信のない人は大砲の処理(3-5)を参考にしてください。

​ 例のごとくpublicにした変数がインスペクターに表示されています。星のプレハブをダブルクリックして開いてください。

 プレハブを直接編集すると、同じプレハブのオブジェクト全てに変更が反映されます。既にステージに設定したたくさんの星をいちいち設定する必要はないということです。

 StarGetSEには星の取得音のAudioClipを、OneShotPrefabには先ほど作成したOneShotSEのプレハブを設定してください。

 これで星を取得した時に効果音が再生されるようになりました。

 実際に星を取得して確認してみてください。

​ ここまでのOneShotAudioClipを用いた一連の内容はどのゲームでも使える処理です。皆さんがゲームを作る際にもぜひこのプログラムを流用してください。

 星の取得音は問題なし…と思いきや最後に取得した星の取得音だけが正常に再生されなかったと思います。これは最後の星を取得した瞬間にシーンが切り替わったからです。OneShotSEを作成したことで星が消えても効果音が再生されるようになりましたが、シーンが切り替わるとOneShotSEもまとめて消えてしまいます。

​ シーンが切り替わってもオブジェクトが勝手に消えないようにするコードがあります。OneShotAudioClipに画像のような関数を追加してください。

 Awake関数はStart関数よりも先に実行される関数です。正確には、オブジェクトが生成された直後に実行されるのはAwake関数で、Start関数は1回目のUpdate関数が呼ばれる前に実行される関数になります。

 DontDestroyOnLoad(gameObject); を実行することで、引数に設定したオブジェクトがシーンの変更に巻き込まれなくなります。この場合 Destroy(gameObject); などで直接消してあげないとオブジェクトが残り続けてしまうので注意しましょう。

 ちなみにLesson5ではクリアタイムの変数がシーンをまたげるようにstaticを使用しましたが、DontDestroyOnLoadを用いて変数を保持する方法もあります。それぞれメリットとデメリットがありますが、最初の内は使いやすい方で構いません。

Unity Tips!

9

大砲のプレハブを
​設定する

 大砲の発射音も再生しましょう。

 大砲は消えることはないのでOneShotSEを使う必要はありません。ですが大砲の音がどこにいても聞こえてしまうと、大砲をたくさん設置した際にかなりうるさくなってしまいます。今まではどこにいても均等に音が聞こえる「2D」サウンドでしたが、ここでは距離によって音量が減衰していく「3D」サウンドを使用します。

​ 大砲にAudioSourceを追加しましょう。Cannonのプレハブを開き、Add Componentから追加してください。

10

3Dサウンドに変更

 AudioSourceのパラメータを設定します。今まではSpatial Blendが2Dでしたが、これを3Dに変更することで距離によって効果音の音量が変わるようになります

 Spatial Blendのスライダーを一番右へ動かして3Dに変更しましょう。

 AudioClipには大砲の効果音を設定して、PlayOnAwakeとLoopのチェックは外しておいてください。

 サンプルの発射音は少し長く、重たい印象を受けるのでPitchを2に上げています​。ピッチを上げると音が高く、速く再生されるようになります。ピッチは好みに応じて自由に調整してください。

 AudioSauce下部にある3D Sound Settingを開きます。ここでは3Dサウンドの聞こえ方を調整することができます。

 シーン内に見える青い球体が音の聞こえる範囲です。サンプルではMaxDistance(音が聞こえる最大距離)を100に調整しています。これも世界の広さに応じて自由に調整してください。

 下部にあるグラフを見ると距離が50以上になるとほとんど音は聞こえないことが分かります。実際にはBGMに紛れてほぼ聞こえないはずです。そのため最大距離は大きく設定しています。

11

発射音を再生

 ここまでできたらCannonObjectスクリプトを開いて発射音を再生するコードを書きましょう。

​ 赤い部分のコードを追加してください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

 

public class CannonObject : MonoBehaviour
{
    public GameObject Bullet;       // 発射するオブジェクト

 

    public float CannonInterval = 3.0f; // 発射間隔
    public float CannonSpeed = 2.0f;    // 弾の速度
    public float CannonLimit = 5.0f;    // 弾の生存時間
    public float BulletAddY = 1.2f;     // 弾の発射位置を持ち上げる量
    public int DamagePower = 0;         // ダメージ量

    private float m_cannonTimer = 0.0f;
 

    AudioSource Audio_Source;
 

    void Start()
    {
        // 自分にアタッチされたAudioSourceを取得
        Audio_Source = GetComponent<AudioSource>();
    }

 

    void Update()
    {
        // タイマー減少
        m_cannonTimer -= Time.deltaTime;

 

        if (m_cannonTimer <= 0.0f)
        {
            // 発射座標を計算する
            Vector3 bulletPos = transform.position;
            bulletPos.y += BulletAddY;
            bulletPos += -transform.right * 2.0f;

 

            // 発射処理
            GameObject bullet = Instantiate(Bullet, bulletPos, Quaternion.identity);

 

            // BulletObjectを取得する
            BulletObject bulletObject = bullet.GetComponent<BulletObject>();

 

            // 移動量を計算する(大砲の発射口が左にあるモデルなので左方向を取得)
            Vector3 move = -transform.right * CannonSpeed;
            // 移動速度、生存時間、ダメージ量を弾に教える
            bulletObject.Set(move, CannonLimit, DamagePower);

 

            // 発射の効果音を再生
            Audio_Source.Play();

 

            // タイマーを戻す
            m_cannonTimer = CannonInterval;
        }
    }
}

 これで大砲の発射音が再生されるようになりました。実際にプレイして距離に応じて音量が変化していることを確認してみてください。

 ちなみにサウンドにおける「耳」の役割を果たしているのはAudioListenerというコンポーネントです。これは最初からカメラにアタッチされています。

​ 例えばこれをユニティちゃんにアタッチすれば、ユニティちゃんと大砲の距離で音量が変化するようになります。ただしAudioListenerはシーン上に2つ以上存在できないので注意しましょう。

 解説ではこれ以上の効果音は実装しませんが、今までの内容を参考にぜひ他の効果音も追加してみてください。

 2Dランゲーム編6-3では効果音の処理を共通化して簡単に再生できるようにする措置を行っているため、そちらも参考にしましょう。

6-3

1

エフェクトに

ついて

2

パーティクルの
​追加

 効果音がBGMにかき消されて聞こえにくい場合は、AudioSourceのPriority(優先度)を調整しましょう。

​ 優先度は0~256の範囲で設定でき、値が小さいAudioSourceほど優先して再生されます。

Unity Tips!

6-3 パーティクルの追加

6-3 パーティクルの追加

 Unityには簡単なエフェクトを作ることのできる「Particle Systemという機能があります。パーティクルとは塵や粒子という意味です。

 今回はこれを使ってユニティちゃんがダメージを受けた際に光の粒が飛び散るようにしましょう。

 ちなみにパーティクルを実装するパーティクルエンジンという概念は他のゲームエンジンにもあります。Unityのパーティクルエンジンは「Shuriken(シュリケン)」と呼ばれています。

 外部の解説サイトなどでShurikenというワードを見た時はこのParticle Systemとほぼ同じ意味と思ってもらって構いません。

Unity Tips!

 ヒエラルキーから「Effects」→「Particle System」を追加してください。

 シーン上に光の粒子を放つオブジェクトが追加されました。見えやすい場所に移動して、名前もわかりやすいようにDamageParticleに変更しておきましょう。

​ Particlesウィンドウからプレビューの再生、停止ができます。

3

基礎的な
​パラメータを設定

 エフェクトの周りに表示されるオレンジ色の枠が邪魔な人は右上のGizmoボタンをクリックして、Selection Outlineのチェックを外してください。

Unity Tips!

 ParticleSystemにはたくさんのパラメータがあり、様々な設定をすることができます。ここでは全て説明することはできませんが、興味のある方は色々調べてみてください。

 

​ まずは基本となるパラメータを調整します。以下のパラメータを設定してください。

​(数値はあくまで例なので自由に調整して構いません)

​・Durationを0.2にする

​→エフェクトの再生時間です。小さくして

 テンポよく表示されるように短くしています。

・Looping のチェックを外す

→ループ再生にするかどうか設定します。

 チェックを外すとループ再生がされなくなり

 エフェクトが終わるようになります。

・Start Lifetimeを0.6にする

→1つ1つの粒子の生存時間です。

 小さくすると早く消えるようになります。

 

​・Start Speedを2にする

→パーティクルの初速です。初期値の5では

 粒子が遠くに飛びすぎているので、小さく

 調整しています。

・Start Sizeを0.4にする

​→パーティクルの初期サイズです。

 少し小さくして粒子っぽくしています。

・Stop ActionをDestroyにする

→パーティクルが終了した際の処理です。

 Destroyにするとパーティクルが終了した時に

 自動でオブジェクトが削除されるように

 なります。

4

その他の
​パラメータを設定

 他にもStartColorで粒子の色を変えたり、Gravity Modifierで粒子に重力をかけたりできます。色々変更してみましょう。

​ また、パラメータの右側にある▼をクリックすると時間の経過に応じてパラメータを変化させることができます。

 「Curve」にすると下部に赤いグラフが表示され、マウスで操作することができます。サンプルではStart Speedがだんだん小さくなるグラフを設定しています。

​※ グラフが出てこない人は下部のParticle System Curveをクリックして上に動かしてみましょう。

 「Random Between Two Curves」を選択すると2つのグラフの間からランダムに値が決定されるようになります。これによってパラメータの初期値を散らして、エフェクトの単調さを軽減できます。

Unity Tips!

 残りのパラメータを調整します。同じように以下のパラメータを設定してください。

 それぞれの項目が閉じていたらクリックして

開いてください。

・EmissionのRateOverTimeを100にする

→1秒間に放出される粒子の数です。

 大きくすると大量に粒子が放出されるようになります。

​・ShapeのShapeをSphereにする

→粒子が放出される形を設定します。

 Coneは文字通りコーン型(円錐

 Sphereは球体なので全方向に放出されます。

・Size Over Lifetimeにチェックを入れ、

​ Sizeのグラフを設定する

→時間に応じて粒子の大きさを変化させることができます。

 右下のボタンを押すとだんだん減少​していくグラフが

 自動で設定されます。

5

プレハブ化する

 納得のいくダメージエフェクトが完成したら、Prefabフォルダにドラッグ&ドロップしてプレハブ化してください。

6

エフェクトを
​生成する

 プレハブ化できたらヒエラルキー内にあるDamageParticleは削除してください。

​ 後はダメージを受けた時にDamageParticleのプレハブを生成するだけです。

​ PlayerHitPointスクリプトを開いて、赤い部分のコードを追加してください。青い部分は穴埋めなのでコメントを参考に記述しましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

 

public class PlayerHitPoint : MonoBehaviour
{
    public int MaxHitPoint = 3;
    public int HitPoint = 3;

 

    public float InvincibleTime = 3.0f;         // 無敵時間
    private float m_invincibleTimer = 0.0f;     // 無敵時間のタイマー
    private bool m_invincibleFlag = false;      // 無敵フラグ

 

    // ①ダメージエフェクトを格納するpublicなGameObject型の変数
    (ここに記述)
    // エフェクトが足元に出ないように持ち上げる補正量
    public float DamageEffect_Y_Up = 0.8f;

 

    // ダメージ処理
    public void Damage(int damage)
    {
        // 無敵時間中は実行されないようにする
        if (m_invincibleFlag)
        {
            return;
        }

 

        // Mathf.Clampは値が範囲内に収まるようにする関数
        HitPoint = Mathf.Clamp(HitPoint - damage, 0, MaxHitPoint);

 

        // 無敵時間開始
        m_invincibleFlag = true;
        // 無敵タイマーをセットする
        m_invincibleTimer = InvincibleTime;

 

        // エフェクトを表示する座標を計算する
        Vector3 effectPos = transform.position;
        effectPos.y += DamageEffect_Y_Up;

 

        // ②ダメージを受けたらダメージエフェクトを生成する
        //  座標はeffectPos(CannonObjectの発射処理を参考に!)

        (ここに記述)

    }
 

    void Update()
    {
        if (m_invincibleFlag)
        {
            // 無敵時間のタイマー減少
            m_invincibleTimer -= Time.deltaTime;

 

            if (m_invincibleTimer <= 0.0f)
            {
                m_invincibleFlag = false;     // 無敵時間終了
            }
        }
    }

}
 

 DamageEffect_Y_Upはエフェクトの出現位置を上に持ち上げる量を保持する変数です。ユニティちゃんの座標は足元になっているので、補正しないとエフェクトが足元から出てしまいます。この変数も例のごとくpublicなので自由に調整してください。

 これでダメージを受けた時にパーティクルが放出されるようになりました。ゲームを実行して確認してみてください。Stop ActionをDestroyにしているので、再生が終わったオブジェクトは自動で削除されます。

​ パーティクルが気に入らない時はプレハブをダブルクリックしてパラメータを調整してみましょう。

 落下した時にエフェクトが再生されないのは、落下した位置にエフェクトが出現しているからです。

​ PlayerFallスクリプトの落下処理の順番を入れ替えて、位置を初期位置に戻してからダメージを受けるようにすればエフェクトの位置も正常になります。

Unity Tips!

 ここではダメージエフェクトのみ実装しますが、ぜひ星を取得した時のエフェクトや大砲の弾が消える時のエフェクトなども実装してみてください。今回触らなかったパラメータも色々変更してみましょう。

【色々なParticleSystemの設定が載っているオススメのサイト】

https://styly.cc/ja/tips/tips-unity_particle/

6-4

6-4 ポストエフェクト

6-4 ポストエフェクト

1

​パッケージの導入

 最後の仕上げに画面にポストエフェクトをかけます。ポストエフェクトとは、描画の最後にフィルターをかけるように画面を加工する処理のことです。

​ これで画面を少しリッチにして、この3Dアクションゲーム編を締めくくろうと思います。

​ 上部の「Window」→「Package Manager」を選択してください。

 パッケージマネージャーが開いたら左上の表示範囲の設定を確認してください。

 もし「Packages: In project」になっていたらクリックして「Unity Registry」に変更してください。

 右上の検索欄に「Post Processing」と入力してください。同名のパッケージが表示されるので、右下のInstallボタンをクリックしてインストールしてください。

 Post Processing(以下ポストプロセス)は、Unityでポストエフェクトをかけるために必要な素材をまとめたパッケージです。

 Post Processingの横に緑のチェックマークが出たら導入完了です。パッケージマネージャーを閉じてください。

2

カメラの設定

 ポストプロセスの設定をしていきましょう。

​ インスペクターのMainCameraを選択して、Add Componentから「Post-Process Layer」を検索して追加してください。

​ Layerの設定をNothingからDefaultに変更してください。

3

ボリュームの追加

 次はGameオブジェクトを選択して、Add Componentから「Post-Process Volume」を検索して追加してください。

​ Is Globalにチェックを入れてからNewボタンをクリックしてください。

 Newボタンを押すと下部に「Add effect…」のボタンが追加されます。

 このボタンを押してUnityを選択すると様々なポストエフェクトが表示され、クリックすることでゲームに追加することができます。

 今回はこの中でもよく使う、いくつかのポストエフェクトを追加していきます。

4

Ambient

Occlusion

 まずは「Ambient Occlusion」です。

 これを追加すると折り目や角、狭い場所が暗くなります。これによって物体がその場に置かれている雰囲気が出て、画面の現実感が増します。

 Intensityの値を調整すると影響度が変化します(教材では0.3)

 ただ、少し重く時間のかかる処理なのでスマートフォンゲームなどで実装する際は注意が必要です。

 以下の画像を見比べてみると、Ambient Occlusionなしに比べてありの方は足場に影がついて、現実感が上がっていることが分かると思います。今はシンプルなモデルなのでわかりにくいですが、複雑なモデルだと効果を実感しやすいです。

5

Bloom

 次は「Bloom」です。

 これを追加すると光があふれ出ているように見えるようになります。特に暗闇で光るネオンのような物体が綺麗に見えるようになります。

 このゲームに暗闇で光る物体はありませんが、それでも画面がぼんやり明るくなります。

 Intensityの値を調整すると光の強さが変化します(教材では1)

 また、Thresholdの値を調整するとBloomの対象になる明るさのボーダーが変化します。

 以下の画像を見比べてみると、Bloomありの方は足場の端が明るくなっています。空や画面も全体的に明るくなり、野外にいる雰囲気が増しています。

6

Depth of Field

1_6_49
1_6_50

 最後は「Depth of Field」です。

 被写界深度と呼ばれるもので、ピントが合っている部分以外がぼやけるようになります。ピントが合ってほしいのは当然ユニティちゃんなので、ユニティちゃんにピントが合うようにパラメータを調整してみてください。

 Focus Distanceはピントの合う距離です(教材では1.6)
 Apertureはピントの合う範囲です。値が小さいほど広い範囲がぼやけます(教材では15)

​ ゲームを実行しながらインスペクターの値を操作すると調整しやすいでしょう。アクションゲームなのでかなり弱めにかけていますが、グラフィックを強調したいシーン(イベントシーンなど)では強くかけることで印象的な画面作りができます。

 以下の画像を見比べてみると、Depth of Fieldがオンの方はユニティちゃん以外の場所がぼやけています(違いがわかりやすいように強めにかけています)

1_6_53
1_6_54

 他にもポストプロセスには色調補正のできるColor Gradingや画面を歪ませるLensDistortionなど様々なエフェクトがあります。ぜひ色々触ってみてください。

【解説しなかったポストプロセスについて載っているサイト】https://styly.cc/ja/tips/unity_postprocessing_master/#Post_Processing_Stack

6-5

6-5 ゲームのビルド

6-5 ゲームのビルド

1

ビルド設定

 これで3Dアクションゲーム編のLessonはおしまいです。物足りない人はLessonEXを見て様々な要素を加えてゲームのクオリティを上げていってください。最初に実装するものとしてオススメなのはポーズ画面です。

​ ゲームが完成したらビルドして、他の人が遊べる形式にしてみましょう。

​ 左上の「File」から「Build Settings…」を選択してください。

 ビルド前に左下の「Player Settings…」をクリックしてください。

 Playerを選択するとゲーム名やバージョン、アイコンなどの設定ができます。好みの設定にしておいてください。マウスを使うゲームであればカーソル画像の設定もできます。

(ゲーム名は日本語でも大丈夫なはずです)

 下部の「Resolution and Presentation」をクリックして、Fullscreen Modeから起動時のモードを変更できます。

 起動時はフルスクリーンですが、Windowedモードにすることでスクリーンサイズを指定することができます。Gameウィンドウで指定した16:10というサイズはあくまでプレビュー用のサイズで、実際のビルドサイズはここで指定できます。教材では16:10に合わせて1600×1000にしておきます。

2

ゲームをビルド

 準備ができたら右下の「Build And Run」を選択してください。

 適当な場所に空のフォルダを作り、出力先に指定します。

 ビルドが終わるとゲームが開きます。これでビルドは完了です。

 無料版Unityで制作したゲームは起動時にUnityのロゴが出ます。どうしても消したいという方は有料プランへの加入が必要です。Player SettingsのSplash Screenで多少の内容調整は可能です。

3

最後に

 ビルドしたゲームは他の人に配布して遊んでもらうことができます。今までのLessonを参考に色々なゲームを作ってみましょう。

※ (趣味の範疇であれば)好きな版権キャラを使って自由にゲームを作ってOKです。もちろん2DでもOK!とにかく数をこなせば、いつの間にかUnityが上達しているはずです!

​ 完成させるのが一番ですが、完成しなくてもまずはUnityをたくさん触ってみましょう!

​ お疲れさまでした!

 ここから先のLessonは皆さんが自由に選んでください。​ 
 

 ここまでの総まとめ「3Dアクションゲーム編 復習チャレンジ

 

 2Dゲームやマウス操作について知りたい方は「2Dランゲーム編
 

 1人称視点やより発展的な3Dゲームについて知りたい方は「3D脱出ゲーム編
 

 ほとんどが穴埋め式で練習に最適な「2Dシューティングゲーム編
 

 ゲーム制作に役立つ小ネタ集を見ながら自分だけのゲームを作りたい方は「LessonEX

 Unityにはゲームで使える3Dモデルなどを配布しているAsset Storeというサイトがあります。

 ここではAsset Storeから素材をインポートする流れを紹介します。

 まずはAsset Storeのページを開いて、Unityアカウントでログインしてください。

 上部の検索欄に検索したい素材の名前を入力してください。英語で入力する必要があるので注意しましょう。

 上部の検索欄に検索したい素材の名前を入力してください。英語で入力する必要があるので注意しましょう。

 「Add to My Assets」を選択してください。

​ ただし素材をインポートしたいUnityのプロジェクトを開いた状態でクリックしましょう。

 「Accept」を選択します。

 上部に表示されるタブから「Open in Unity」を選択してください。

 (Chromeの場合)Unity Editorを開くことに対する確認ダイアログが表示されるので「Unity Editorを開く​」を選択してください。

 Unity側でPackage Managerが開くので「Download」ボタンを押してください。

 ダウンロードが終わったら「Import」ボタンをクリックしましょう。

​ これで素材をプロジェクトにインポートできます。

 インポートした素材を使って、様々なゲームを作ってみましょう!

Unity Tips!

まとめ

・サウンドを再生する場合は音の発生源となるAudio Sourceコンポーネントを使う

​ Audio SourceのPlay関数から音を再生できる

​・Unityには画面にエフェクトを加えて画面をリッチにできる「Post Processing」というパッケージがある

 画面にブルームや被写界深度を適用することで、手軽に描画のクオリティを上げられる

まとめ

評価テスト

評価テスト

河原電子ビジネス専門学校
​ゲームクリエイター科

bottom of page