もふもふ技術部

IT技術系mofmofメディア

Unityで画面遷移する - ゾンビの部屋にタイトル画面を実装

先日ゾンビ部屋を作ったので、タイトル画面をつけてUnityで画面遷移してみたいと思います。

3Dオレの部屋をVR対応してゾンビさんと対面する

タイトル画面の背景

やりたいことは画面遷移なので、タイトル画面はなんでもいいんだけど、せっかくだから雰囲気出すために町にゾンビがウヨウヨしてる感じを表現してみる。

それっぽい家のAssetsを見つけたのでこれを使います。

UK Terraced Houses Pack FREE - Asset Store

例によってダウンロード/インポートしておく。

Assets -> UK Terraced Houses FREE -> Prefabsの下にある家を適当に画面に配置していきます。

ちなみにInspectorの下の黒いバーを上にドラッグすると、選択しているPrefabのビジュアルが見えるので便利。

prefab-before

prefab-after

こんな感じに配置。

background

正面に並んだ家が見えるようにMain Cameraを移動する。

Position X:-16, Y:2, Z:-12
Rotation X:0, Y:90, Z:0

ゾンビさん達を配置

続いてAssets -> Prefabs -> ZombieからHierarchyにドラッグしてゾンビを3体適当に配置。どこでもいいんだけど、全員同じ方向に歩いてると不自然なので、それぞれRotationのYをバラバラにした。

3体目はカメラより後ろに配置して、後ろからでてくるようにする。

zombies

前回と同じフリーのゾンビさんを使ってるので、ちょっとアニメーションを調整します。

walk_in_placeを外して、最初からちゃんと歩くようにします。また、GoWalkというBool値のパラメータを定義しておく。

animation

Hierarchy -> ZombieNew ScriptAdd Componentします。

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

public class ZombieController : MonoBehaviour
{
    Animator animator;
    float time = 0f;  // 単位: 秒
    public float thresholdTime = 5f;

    void Start () {
        animator = GetComponent<Animator>();
      }

    void FixedUpdate()
    {
        time += Time.deltaTime;
        if (time > thresholdTime) {
            animator.SetBool("GoWalk", true);
        }
    }
}

Threshold TimeInspectorから上書きできるようになるので、3体のゾンビさんにバラバラの値を設定しておきます。

animation

この数値はゾンビが歩き出すまでの時間を制御していて、全てのゾンビがピッタリ合わせて歩くのを防いでいます。もうちょっと良いやり方あるかも知れないけど分からんので一旦これで。

そういえば、よく見かけるdeltaTimeってなんだろうなって思ったら、下記エントリに解説が載ってた。

Unity - 一定時間で消えるオブジェクトをつくる - おれ、Unity2Dでゲーム作るんだ。

画面遷移するボタン

クリックしたら画面遷移するボタンを配置します。Hierarchy -> Create -> UI -> Buttonすると、Canvas,Button,EventSystemなどが設置される。

Buttonがよく分からん場所に配置されてたりするので、Pos X, Pos Y, Pos Zの座標を全て0に設定しておく。

続いてButtonNew ScriptAdd Componentする。

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

public class ButtonHandler : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
    }

    // Update is called once per frame
    void Update()
    {

    }

    public void OnClick() {
        Debug.Log("Button click!");
        SceneManager.LoadScene ("Room");
    }
}

Button -> Inspector -> Button(Script) -> On Click()を設定する。

onclick

よっしゃこれでいけるだろ!とやってみたらエラーでた。

Scene 'Room' couldn't be loaded because it has not been added to the build settings or the AssetBundle has not been loaded.
To add a scene to the build settings use the menu File->Build Settings...
UnityEngine.SceneManagement.SceneManager:LoadScene(String)
ButtonHandler:OnClick() (at Assets/ButtonHandler.cs:21)
UnityEngine.EventSystems.EventSystem:Update()

RoomなんてSceneはねえよボケってことらしいので、RoomSceneを開いている状態でFile -> Build Settings -> Scenes In Build -> Add Open Scenesしておく。これでOK。

add-scene

試してみたら無事画面遷移出来ました!

title

transition

BGMを設定

せっかくなので雰囲気が出るようにBGMを設定します。いつもお世話になっているフリー素材屋さんへ。

フリーBGM素材 『不気味な部屋』 試聴ページ|フリーBGM DOVA-SYNDROME

ダウンロードしたmp3ファイルをProject -> Audiosフォルダにドラッグしておき、Hierarchy -> Create -> Audio -> Audio Sourceで追加したファイルを選択する。

やりました!不気味なBGMが流れます!