初心者でもできる! 7日間で作るUnityゲーム開発

Day5:プロの声優さんの音声をゲームに取り入れる!

プロ生ちゃんの音声ファイルを追加する

前回の記事ではタイムトライアル機能を追加してゲーム性を強化しました。時間を競うという要素が加わることでゲームらしくなってきましたが、華やかさが足りません。そこで今回はプロ生ちゃんの音声を追加してゲームに華やかさを加えていきたいと思います。

プロ生ちゃんの音声は声優の上坂すみれさんが担当

プロ生ちゃんの音声ファイルは無償公開されています。非商用・非営利かつ無償での配布であり、個人や法人格のない団体(サークルなど)であれば、アプリや動画などに使うことができるそうです。詳しくは、利用ガイドラインを見てみてください。

プロ生ちゃんの音声ファイルのCVは、⁠中二病でも恋がしたい!』の凸守早苗役などでおなじみの上坂すみれさんが担当されています。プロの声優さんの音声を自分のゲームで使うことができるなんで夢のようですよね。詳しい情報はプログラミング生放送Webサイトにあるので見てみてください。

プロ生ちゃん音声ファイルをダウンロードしてUnityに取り込む

以下のURLにアクセスして「kei_voice_201404」をダウンロードしてください。

ゲーム内で使用する音声ファイルをUnityに取り込みます。UnityのProjectにSoundsフォルダを作成します。Projectの[Create]ボタンをクリックし、表示されたコンテキストメニューの[Create⁠⁠—⁠Folder]を選択します。作成されたFolder名を「Sounds」に変更してください図12⁠。

図1
図1
図2
図2

先ほどダウンロードしたkei_voice_201404.zipを解凍して、kei2/mp3フォルダの中にあるkei2_voice_264.mp3、kei2_voice_266.mp3、kei2_voice_268.mp3 、kei2_voice_270.mp3を先ほど作成したSoundsフォルダにドラッグアンドドロップします図3⁠。

図3
図3

これでProjectのSoundsフォルダに4つのmp3ファイルが取り込まれました。その4つのファイルの3Dサウンドを無効化します。3DサウンドについてはDay3で説明しているので、忘れてしまった人は読み直しておいてください。Soundsフォルダのkei2_voice_264をクリックして表示されたInspectorの3D Soundのチェックを外してApplyボタンをクリックします図4⁠。

図4
図4

同様の手順をその他の3つのファイルについても行ってください。

音声ファイルを再生して台詞を確認してみる

先ほど取り込んだ4つのmp3ファイルを再生して台詞を確認してみましょう。ProjectのSoundsフォルダのkei2_voice_264をクリックして表示されたInspectorの下のほうにある音声の波形グラフの左端をクリックすると、音声ファイルを再生することができます図5⁠。

図5
図5

kei2_voice_264が「張り切って行こう!⁠⁠、kei2_voice_266が「行っくよー!⁠⁠、kei2_voice_268が「それっ!⁠⁠、kei2_voice_270が「やったー!」という台詞です。

ファイルと台詞の対応表が以下のURLに公開されているので、ほかにも使いたい音声がないか探してみるのもいいかもしれません。

音声をプログラムから再生する仕組みを作る

MonoDevelopを起動してSoundManager.csに以下のコードを追加します。

    public AudioClip startVoiceAudio;
    public AudioClip fireVoice1Audio;
    public AudioClip fireVoice2Audio;
    public AudioClip endVoiceAudio;
    private AudioSource voiceAudioSource;

    void Start() {
        this.voiceAudioSource = gameObject.AddComponent<AudioSource>();
    }
    public void PlayStartVoice() {
        voiceAudioSource.PlayOneShot(startVoiceAudio);
    }
    public void PlayFireVoice1() {
        voiceAudioSource.PlayOneShot(fireVoice1Audio);
    }
    public void PlayFireVoice2() {
        voiceAudioSource.PlayOneShot(fireVoice2Audio);
    }
    public void PlayEndVoice() {
        voiceAudioSource.PlayOneShot(endVoiceAudio);
    }

Day3ではUnity上でSoundManagerオブジェクトのInspectorにAudioSourceを追加しましたが、今回はそれと同じことをソースコード上で行います。それが以下の部分です。

    private AudioSource voiceAudioSource;

    void Start() {
        this.voiceAudioSource = gameObject.AddComponent<AudioSource>();
    }

音声を再生する用のAudioSourceをvoiceAudioSourceフィールドとして定義してStartメソッドの中でAudioSourceコンポーネントを設定しています。

それから今回取り込んだ4つの音声ファイルを参照するための変数を定義しています。

    public AudioClip startVoiceAudio;
    public AudioClip fireVoice1Audio;
    public AudioClip fireVoice2Audio;
    public AudioClip endVoiceAudio;

これらの音声を再生するためのpublicメソッドをPlay~という名前で4つ定義しています。

Unityに戻って、HierarchyのSoundManagerをクリックし、表示されたInspectorの「SoundManager(Script)⁠⁠—⁠Start Voice Audio」にProjectのSoundsフォルダのkei2_voice_264をドラッグアンドドロップします。同様の手順でkei2_voice_266を「Fire Voice 1Audio」へ、kei2_voice_268を「Fire Voice 2Audio」へ、kei2_voice_270を「End Voice Audio」へドラッグアンドドロップします図6⁠。

図6
図6

これでコード上から音声ファイルを参照することができるようになりました。続いて、音声を再生するコードを追加していきます。

ゲーム開始時に音声を再生させる

GameControl.csのStartメソッドの末尾に以下のコードを追加します。

       
        SoundManager.Instance.PlayStartVoice();

これでゲーム開始時に「張り切って行こう!」という音声が再生されます。

バズーカ発射時に掛け声を再生させる

Bazooka.csのUpdateメソッドに以下のコードを追加します。//追加コード(ここから)から//追加コード(ここまで)を追加します。

        void Update () 
        {
                if (animator)
                {
            animator.SetFloat("Aim", load ? 1 : 0, .1f, Time.deltaTime);

            float aim = animator.GetFloat("Aim");
            float fire = animator.GetFloat("Fire");

            if (Input.GetButton("Fire1") && fire < 0.01 && aim > 0.99)
            {
               animator.SetFloat("Fire",1);
               //追加コード(ここから)
               if (UnityEngine.Random.Range(0, 2) == 0) {
                   SoundManager.Instance.PlayFireVoice1();
               } else {
                   SoundManager.Instance.PlayFireVoice2();
               }
               //追加コード(ここまで)

追加したのはバズーカ発射時に音声を再生するコードです。

if (UnityEngine.Random.Range(0, 2) == 0) {で0~1を乱数生成させて0の場合と1の場合で再生する音声を切り分けています。これによりバズーカを発射する度に「行っくよー!⁠⁠、⁠それっ!」という掛け声がランダムに再生されます。

ゲームクリア時に音声を再生させる

GameControl.csに以下のフィールドを追加します。

    bool playedEndVoice = false;

GameControl.csのOnGUIメソッドに以下のコードを追加します。//追加コード(ここから)から//追加コード(ここまで)を追加します。

    void OnGUI() {
        GUI.Label(scoreRect, "スコア " + score, style);
        GUI.Label(timerRect, "タイム " + elapsedTime, style);
        if (FinishedGame()) {
            //追加コード(ここから)
            if (playedEndVoice == false) {
                SoundManager.Instance.PlayEndVoice();
                playedEndVoice = true;
            }
            //追加コード(ここまで)

ゲームクリア時にスコア表示する箇所に「やったー!」という音声を再生するコードを追加しました。スコア表示をしているOnGUIメソッドは毎フレーム呼び出されるので、音声再生を一度だけにするためにplayedEndVoiceというフラグを使って、再生回数を一度に制御しています。

それではゲームを実行してみましょう!ゲーム開始時と終了時、バズーカ発射時に音声が再生されることを確認してください。

図7
図7

いかがだったでしょうか? プロの声優さんの音声を追加することでゲームの雰囲気が華やかになり、キャラクターに対して親近感が増したかと思います!


次回は敵とプレイヤーの位置関係を映すレーダー画面を追加していきたいと思います。お楽しみに!

おすすめ記事

記事・ニュース一覧