(この記事の使用環境: Unity5.5.0f3 Personal、Windows10)


今回は簡単にゲームをリセット(リスタート)できるよう、UnityのSceneManagerを使ってみました。

こんな感じ。マウスの右クリックでゲームをリセットし、やり直せるようにしています。


スクリプトで簡単に実現できます。こんな感じ。コメントしている箇所のみ見てください。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;          // 【これを追記する】

public class BombGenerator : MonoBehaviour
{
    public GameObject bombPrefab;
    public float force;
    public float upAdjustment;

    private void Update ()
    {
        if (Input.GetMouseButtonDown (0))
        {
            GameObject bomb = Instantiate (bombPrefab, transform.position, transform.rotation) as GameObject;
            Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
            bomb.GetComponent<Rigidbody> ().AddForce (( ray.direction + Vector3.up * upAdjustment ) * force);
        }


        // --- 【これを追記する】右クリックでシーン再読み込み -----------------------------------
        if (Input.GetMouseButtonDown (1))
        {
            SceneManager.LoadScene (0);
        }
        // --- 【追記ここまで】 ---------------------------------------------------------------
    }
}
4行目で UnityEngine.SceneManagement の使用を宣言し、25行目で SceneManager.LoadScene を使ってシーンを読み込んでいます。読み込むシーンに現在のシーンを指定することで(シンプルな構造のゲームなら)ゲームリセットできます。

なお、これだけではシーン読み込み後にライティングがおかしくなってしまうようです。こんな感じ。


この現象を回避するためには、メニューの Window > Lighting > Scene の OtherSetting の「Auto」のチェックを外し、その横の「Build」ボタンを押して(ライティングを焼き込む?)処理を行っておけば良いようです。
SnapCrab_NoName_2017-1-29_18-28-40_No-00

今回は以上です。