音無サノトの空想録

ゆるい漫画を描いています

【ゲーム制作】Unityを利用した横スクロールゲーム開発 02 ゲームオーバー/クリアの実装と1stステージ土台作り

どうも音無サノトです。

毎週制作しているゲームのメモになります。

 

作業ログ

今日やることは以下の通り。

  • スポットライトの設置
  • ゲームオーバーの実装
  • ゴールの実装
  • ステージの土台を作成

スポットライトの設置

キャラクターの顔が暗かったのでスポットライトを追加して調整します。

f:id:otonasisanoto:20200906120611p:plain

 

やり方はHierarchyビューからpoint lightを追加してposition(場所)とinsensity(強度)を調整。

f:id:otonasisanoto:20200906121406p:plain

これでOK。 

 

今後、ステージを作成する際に今までのオブジェクトをいちいち作成するのは面倒なので、空のオブジェクトを作成し、キャラクター、ライト、カメラをまとめてプレハブ化しておきます。

f:id:otonasisanoto:20200906121911p:plain

 

ゲームオーバーの実装

プレイヤーがステージから落ちた場合、ゲームオーバーとなるようにします。

こちらも過去に作ったことがあるのでそれを参考にささっと実装します。

 

まずは空のオブジェクトにBox Colliderを追加してステージの下の方に設置し、大きさも変更します。

値は画像の赤枠通り。Is Triggerにチェックを入れておきます。

f:id:otonasisanoto:20200906123236p:plain

 

次にテキストの表示。

テキストを追加して表示範囲、表示テキスト、フォントサイズなどを調整して、画面の中央に「ゲームオーバー」と表示されるようにします。

f:id:otonasisanoto:20200906124108p:plain

 

ゲームオーバーの当たり判定時に実行されるスクリプトを作成してキャラクターにアタッチします。

※この時の注意点なのですが、プレハブ化しているので、元のプレハブの方にアタッチしておきます。そうしないと流用した際に、スクリプトが追加されてないものが使用されてしまいます。

 

コードは下記のようにしました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;  // UIを使う際は追加

public class PlayerSetting : MonoBehaviour
{
    public Text gameoverText; // ゲームオーバーと表示されるテキストをいれる

    void Start()
    {
        // ゲームスタート時はゲームオーバーを非表示
        gameoverText.gameObject.SetActive(false);
    }

    // 衝突判定
    void OnTriggerEnter(Collider other)
    {
        // GameoverLineというオブジェクトに衝突したら
        if(other.gameObject.name == "GameoverLine")
        {
            gameoverText.gameObject.SetActive(true); // テキストを表示
            Time.timeScale = 0; // ゲームを停止する
        }

    }
}

 

これで落下時にゲームオーバーと表示されるようになりました。

 

ゴールの実装

次にキャラクターがゴールにたどり着いた時の処理を制作します。

ゴールにはパーティクルを使用します。

パーティクルというのは粒子が舞ってキラキラする感じのやつです。

f:id:otonasisanoto:20200906140825p:plain

これのPosition、Scale、そして色を変更してBox Colliderを追加。

あとはゲームオーバーの時と同じようにテキストを用意して処理を追加します。

public class PlayerSetting : MonoBehaviour
{
    public Text gameoverText; 
    public Text goalText;   // ゴールを表示されるテキストをいれる

    void Start()
    {
        gameoverText.gameObject.SetActive(false);
        goalText.gameObject.SetActive(false); // スタート時はテキスト非表示
    }

    void OnTriggerEnter(Collider other)
    {
        if(other.gameObject.name == "GameoverLine")
        {
            gameoverText.gameObject.SetActive(true);
            Time.timeScale = 0;
        }

        // GaolPointというオブジェクトに衝突したら
        if(other.gameObject.name == "GoalPoint")
        {
            goalText.gameObject.SetActive(true); // テキストを表示
            Time.timeScale = 0; // ゲームを停止する
        }

    }
}

 

これでゴールの処理も実装しました!

 

今まで制作した、ゲームオーバーやゴールのオブジェクトなどはプレハブ化して、どのステージでも使えるようにしておきます。

 

ステージの土台を作成

ステージをいくつ作るかは未定ですが、最初のステージの土台を作成していきます。

なるべくカメラ切り替えの要素を使わないと進みづらいステージを設計したいですが、そこら辺はやりながら考えていきます。

ビジュアルから作れるのがUnityのいいところですね。

 

ということで色々と試行錯誤して、こんな感じのステージにしてみました。

f:id:otonasisanoto:20200906164831p:plain

 

シンプルだけど割と疲れました。。。

 

プレイ動画は下のような感じ。

 

動画を撮っているとプレイ時間を把握できるからいいですね。

今の動画で1分くらい。

1ステージで1分から5分くらいでサクサク進めるといいんじゃないか、という感覚です。

 

次回はこのステージに面白い仕掛けでも入れられたらなと思っています。