ゲーム制作勉強中!あこがれだったプログラマーに今からなろう!

昔、あこがれていたプログラマー。今からでも勉強してみようと思い立ち、チャレンジ開始! 勉強メモや、悪戦苦闘な日々の記録です。

3Dアクションゲームを作ろう(9):GameOverの実装(1)水に落ちたらGameOverにする。

習作の3Dアクションゲーム。
目的は制限時間以内に敵からジェムを奪い返してくる事に決めた。
今まででスライムとオークマジシャンからジェムをドロップする様に作ったので、あと二種類は敵を作ろうと思っている。

一応、構想として、作成を考えている残りは、

・ゲームの最初に、目的を説明するパネルを表示。
・時間制限を空の明るさで表現。
・回復場所を作成。
・リトライの実装。

こんな感じかな。

今日は、その前に絶対必要なGame Overの一つ、川に落ちた時の処理を作成した。

まず、Trrainをいじって水面を入れる。
これは、
assetstore.unity.com
で適用したまま放置されているので、その場所を移動するだけで良い😄
そのままだと川底が丸見えなので、水面のちょっと下にCubeを作って、川底を見えない様にした。
最後に、川に落ちた時にCollider反応させるCubeを作ってみた。


youtu.be

水面だけを写しておいた方が、なんとも物悲しい雰囲気がするかもしれないから😅
基本はこんな感じで行こうと思う。

レーダーやらHPバーやらはGame Over時には隠しておきたいので、それも消してしまおう。

スクリプトはこんな感じに組んだが、何も特別なことはしていない。

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class Fallout : MonoBehaviour
{

    public GameObject MainCam;//メインカメラoff用に取り込む。
    public GameObject RadarCam;//レーダーカメラoff用に取り込む。
    public GameObject Player;//Playerの子オブジェクトになっているメインカメラを開放するために取り込む。
    bool Dead =false;
    Vector3 vector3;
    public AudioSource audioSource;
    public AudioClip potyaSE;
    public GameObject MainCanvas;//UIやレーダー画面を消すためにCanvasを取り込む。
    public GameObject gameovercanvas;//Game Over画面
    public  Image image;//Game Over画面の暗さ変更用の取り込み。

    Vector4 vector4;
    float count;
    public TextMeshProUGUI text;//Game Over画面の文字の暗さ変更用の取りこみ。
    public AudioSource bgm;   //メインBGM消去用の取り込み。
    public float FadeSpan;//何秒かけてBGMを消すかの設定。

    float FadeTime;
    float BasicBGMVolume;



    private void Update() 
    {
        if(Dead==true)//Game Overになったら
        {
            count+=Time.deltaTime*0.2f;

            if(count<0.8f)
            {
                image.color=new Vector4(vector4.x,vector4.y,vector4.z,count);//Game Overパネルを徐々に暗くする。
            }

            if(count<0.9f)
            {
                text.color=new Vector4(90,0,75,count);//Game Overメッセージを徐々に表示する。
            }

            FadeTime -= Time.deltaTime*2;
            bgm.volume = BasicBGMVolume*(FadeTime / FadeSpan);//BGMを徐々にボリュームをお落とす。
        }
    }
    
    private void OnTriggerEnter(Collider other)
    {
        if(other.gameObject.tag=="Player")
        {
            audioSource.PlayOneShot(potyaSE);//チャポン音再生
            RadarCam.SetActive(false);//レーダーカメラoff
            MainCam.transform.parent = null;//メインカメラをPlayerとの親子関係解除
            MainCanvas.SetActive(false);//UIを消去
            gameovercanvas.SetActive(true);//Game Over画面表示
            Player.SetActive(false);//Playerを消去
            Dead=true;//GameOver状態
            vector4=image.color;//Game Over画面の現在のカラー情報を取り込み
            FadeTime = FadeSpan;
            BasicBGMVolume=bgm.volume;//現在のBGMボリュームを取り込み。

        }    

    }

}

完成形はこんな感じになる。
youtu.be


あとは敵に倒された時のGame Overdも作らないとな〜😅