サウンドをつけて「ユニティちゃんパルクール2020」を完成させる

前回までの作業でゲームに必要な機能等をすべて作り終えることができました。

しかしまだサウンドがないのでなんだか寂しい状態です。そこで最後の仕上げとしてゲームにBGMやSEをつけて「ユニティちゃんパルクール2020」を完成させましょう。

スポンサーリンク

BGMの設定

まずはBGMの設定を行います。GameManagerのプレハブを開き、「SoundManager」コンポーネントの「Default BGM」に好きなBGMを設定しましょう。

SEの設定(GameManager.csの変更)

次にSE(効果音)の設定を行います。今回はユニティちゃんのボイス素材が色々あるので素材には事欠きませんが、やたら乱用するとうるさいのでここでは

  • ステージクリア
  • ゲームオーバー

のときだけSEを再生することにします。また、毎回同じボイスだと飽きるのでランダムで再生できるようにしてみましょう。

さてクリアとゲームオーバーということでGameManagerのスクリプトを変更して対応することにします。GameManager.csに次のように追記してください(※関係ない部分は省略してあります)。

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

[RequireComponent(typeof(MoveSceneManager))]
[RequireComponent(typeof(SaveManager))]
[RequireComponent(typeof(SoundManager))]
[DefaultExecutionOrder(-5)]
public class GameManager : SingletonMonoBehaviour<GameManager>
{

  [Header("シーンロード時に自動生成するプレハブを登録")]
  [SerializeField]
  GameObject[] prefabs = null;

  //★追加1
  [Header("UIの設定")]
  [SerializeField]
  GameObject stageClearCanvasPrefab = null;
  [SerializeField]
  GameObject gameOverCanvasPrefab = null;

  //★追加3
  [Header("サウンド設定")]
  [SerializeField]
  AudioClip[] stageClearSe = null;
  [SerializeField]
  AudioClip[] gameOverSe = null;

  bool isClear = false;
  bool isGameOver = false;
  MoveSceneManager moveSceneManager;
  SaveManager saveManager;
  SoundManager soundManager;

  //省略

  public void StageClear()
  {
    if(isClear || isGameOver)
    {
      return;
    }

    isClear = true;

    //★ここにステージクリア時の処理

    //★追加1
    //プレイヤーを止める
    KurokumaCharacterController player = GameObject.FindGameObjectWithTag("Player").GetComponent<KurokumaCharacterController>();
    player.IsActive = false;
    player.StopCharacter();

    //ステージクリア画面を出す
    Instantiate(stageClearCanvasPrefab);

    //★追加3
    PlayRandomSe(stageClearSe);
  }

  public void GameOver()
  {
    if (isClear || isGameOver)
    {
      return;
    }

    isGameOver = true;

    //★ここにゲームオーバー時の処理

    //★追加2
    //プレイヤーを止める
    KurokumaCharacterController player = GameObject.FindGameObjectWithTag("Player").GetComponent<KurokumaCharacterController>();
    player.IsActive = false;
    player.StopCharacter();

    //ゲームオーバー画面を出す
    Instantiate(gameOverCanvasPrefab);

    //★追加3
    PlayRandomSe(gameOverSe);
  }

  public void Retry()
  {
    moveSceneManager.MoveToScene(moveSceneManager.CurrentSceneNum);
  }

  //★追加3
  void PlayRandomSe(AudioClip[] clips)
  {
    if(clips.Length == 0)
    {
      return;
    }

    soundManager.PlaySe(clips[Random.Range(0, clips.Length)]);
  }

}

できたらGameManagerのプレハブを開いて、次のようにSEを登録してください。

SEの設定例

これでサウンド関係の設定が完了しました。

テストプレイして最終チェックを行う

ここまでできたら、ゲームを繰り返し通しプレイして最終チェックを行いましょう。最低でも次の項目はチェックするようにしてください。

  1. ゲームを最後まで遊ぶことができ、すべてのステージをクリアできること
  2. 難易度が適切であること
  3. 遊びづらい部分が少なく、もしあったとしても説明などでフォローされていること
  4. 想定外の入力・遊び方などをされてもバグらないこと

特に1番と4番は重要なので念入りにチェックしておきましょう。

ゲームをビルドする

ではいよいよゲームをビルド(=実際に遊べるファイルに変換)します。

Build Settingsウィンドウを開き、「ビルドに含まれるシーン」に必要なシーンが登録されていることを確認したら、ウィンドウ下の「ビルド」ボタンをクリックしましょう。

お使いのパソコンによっては処理に数分~十数分ほどかかりますが気長にお待ちください。

「Unitychan Spring Bone」関係のビルドエラーが出る場合の対処法

さて筆者の環境での話ですが、今回のプロジェクトをビルドしようとしたらコンパイルエラーが出てビルドできずに困ってしまいました。調べてみるとユニティちゃんの髪などを揺らす「Unitychan Spring Bone」のエディタ用スクリプトが(本来はビルドに含まれないはずなのに)ビルド対象になっていて悪さをしているようです。

そこで「アセンブリ定義ファイル」というファイルの設定を変更して、これらのスクリプトがビルドに含まれないようにしました。やり方は少々難解ですが、Packages/Unity Chan Spring Bone/Editorフォルダを開き、「com.unity.animations.springbone.editor」の「プラットフォーム」を次のように変更したらビルドが通るようになりました。

アセンブリ定義ファイルの設定を変更する

これは今後のアップデート等で改善されるだろうとは思いますが、現状初心者の方はまず引っかかると思うのでエラーが出て困ったら参考にしてください(※Unityさんが修正してくれることを期待します)。

「ユニティちゃんパルクール2020」完成!

お疲れさまでした!これでユニティちゃんパルクール2020が完成しました。

あとは完成したゲームを自分のサイトに載せたり、unityroomにアップロードしたりして色々な人に遊んでもらえるようにするとさらに良いでしょう(※いずれの場合も利用規約は守ってくださいね)。

以上で「ユニティちゃんパルクール2020」のチュートリアルを終わります。最後までお読みいただきありがとうございました!このチュートリアルが少しでもゲーム制作のお役に立てば幸いです。


トップページに戻る