アトリエ殺人水上機

やりたいことをやった備忘録です。

Unityでストラックアウトを作る(6)リトライ&タイトル実装・音を追加する

sheeplane.hatenablog.com

この記事からの続きです。

前回でゲーム的要素は付け終わったのでリトライの実装、タイトルの実装と音を追加していこうと思います。

目次

6、リトライ&タイトルの実装・音を追加する

 6-1リトライの実装

 6-2タイトルの実装

 6-3音を追加する

6、リトライ&タイトルの実装・音を追加する

今回もひよこ本が活躍しています。

Unity2017入門 最新開発環境による簡単3D&2Dゲーム制作 (Entertainment&IDEA)

Unity2017入門 最新開発環境による簡単3D&2Dゲーム制作 (Entertainment&IDEA)

 

6-1リトライの実装

・ボタンを表示する

スコアと同時にボタンを表示して、ボタンを押すことでゲームをもう一回やり直せるようにします。ボタンの表示方法はこちらのサイト様がわかりやすいです。

gametukurikata.com

ボタンをスコア表示と同じ階層に置いて、こんな感じの設定で置いてみました。

f:id:sheeplane:20180614224129p:plain

・リトライするスクリプトを作る

スコア画面に関するスクリプトに次のような記述を追加して、リトライできるようにします。

    public void OnRetry(){//リトライ用関数
        SceneManager.LoadScene(//シーンをロード
            SceneManager.GetActiveScene().name);//シーンをアクティブ化
     }

 

全体はこんな感じになります。

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;//UI用
using UnityEngine.SceneManagement;//シーン変更用

public class GameResult : MonoBehaviour {

    public Text resultTime;//リザルトタイム
    public GameObject resultUI;//リザルトUI

// Use this for initialization
void Start () {
}

// Update is called once per frame
void Update () {
        if (C_Target.clear) {//もしTargetのクリア変数がTrueだったら
            resultUI.SetActive(true);//Resultを表示
            int result = Mathf.FloorToInt(Timer.time);//整数に直す
            resultTime.text = "けっか:" + result + "秒";//結果の表記
        }
}

    public void OnRetry(){//リトライ用関数
        SceneManager.LoadScene(//シーンをロード
            SceneManager.GetActiveScene().name);//シーンをアクティブ化
    }
}

・リトライできるようになったスクリプトをボタンに結び付ける

スコアを表示するUIの最上層に追加したスクリプトは存在するはずなので、そこからボタンを押した際に実装してほしい処理を指定します。今回は、GameResultのOnRetryを指定します。

f:id:sheeplane:20180614230943p:plain

画像のような感じです。

・動かしてみる

スコア画面を不可視にしたうえでゲームを動かしてみましょう。ボタンを押して再度リトライできるようになっていればOKです。

f:id:sheeplane:20180614224654p:plain

・画面が暗い

リトライすると画面が暗くなる問題が発生すると思います。

この問題を解決してくれるサイト様を紹介します。

siro-on.hatenablog.com

6-2タイトルの実装

・新しいシーンを作る

タイトル画面を実装したいと思います。今のシーンを保存して新しいシーンを作りましょう。

作成したらこんな感じでボタンを置いておきます。

f:id:sheeplane:20180614224846p:plain

ついでにゲーム本体のシーンにもタイトルに戻れるボタンを追加しましょう。

こんな感じです。

f:id:sheeplane:20180614225046p:plain

・シーン移動ができるスクリプトを書く

ではシーン移動が出来るようになるスクリプトを書きます。

タイトル画面からゲーム画面に切り替えるスクリプトはこんな感じです。

 

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

public class StartGame : MonoBehaviour {

    public void LoadingNewScene(){
        SceneManager.LoadScene("strike_out");
    }
}

ゲームからタイトル画面に切り替えるスクリプトはこんな感じです。

    public void LoadingNewScene()//タイトルに遷移
    {
        SceneManager.LoadScene("strike_out_Title");
    }

・ボタンに処理を設定する

前書いた通りです。ボタンか、ボタンの親にスクリプトを設定しておき、実施したい処理を指定してやりましょう。

タイトル画面の切り替えボタンはこんな感じです。

f:id:sheeplane:20180614231300p:plain

ゲーム画面の切り替えボタンはこんな感じです。

f:id:sheeplane:20180614231313p:plain

6-3、音を追加する

音を追加します。音の鳴らし方については次のサイト様が参考になりました。

qiita.com

・BGMを追加

BGMはprefabに突っ込んで、メインカメラにドラッグアンドドロップしておけば鳴り始めます。

・投げる時の音を追加

球を投げるスクリプトのif文に次の記述を追加してやります。

 GetComponent<AudioSource>().Play();//音を鳴らす

全体はこんな感じです。

using UnityEngine;
using System.Collections;

public class Pitching: MonoBehaviour{

    // bullet prefab
    public GameObject ball;

    // 弾発射点
    public Transform muzzle;

    // 弾丸の速度
    public float speed = 1000;

    // Use this for initialization
    void Start()
    {
    }
 
    // Update is called once per frame
    void Update()
    {
        // スペースキーが押された時
        if (Input.GetButtonDown("Fire1"))
        {

            // 弾丸の複製
            GameObject balls = GameObject.Instantiate(ball) as GameObject;
            Vector3 force;
            force = this.gameObject.transform.forward * speed;

            // Rigidbodyに力を加えて発射
            balls.GetComponent<Rigidbody>().AddForce(force);

            // 弾丸の位置を調整
            balls.transform.position = muzzle.position;

            //音を鳴らす
            GetComponent<AudioSource>().Play();

        }
    }
}

 

これでスクリプトを設定しているオブジェクトのinspectorから音を設定してやることが出来ます。

・衝突音を追加

衝突音を追加するには、衝突音を追加したいオブジェクトに次のスクリプトを追加してやりましょう。

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

public class HitPlaySound : MonoBehaviour {
 
   public AudioClip sound;

    void OnCollisionEnter(Collision collision)
    {
        AudioSource.PlayClipAtPoint(sound, transform.position);
    }
}

 

これでスクリプトを設定しているオブジェクトのinspectorから音を設定してやることが出来ます。(二回目)

オブジェクトごとに設定できるのでいろいろ試してみてください。

後、音声素材はちゃんと規約を読んで使いましょう。

f:id:sheeplane:20180614232234p:plain

 

以上です。次回はWebGLのビルドについてお話します。