[UNITY]アクションゲームを作る(死亡イベント)[6]

前回はプログラムをキレイにしましたね
オブジェクト指向に修正

さて、ゲームの根幹を作ると言いながら死亡イベントを作らないのってどういうことでしょうか。
今回、

  • 死亡モーションの追加
  • 画面の暗転
  • スタート位置に戻る。

を作っていきます。

完成形はこんな漢字です。

まずは死亡モーションのアニメーションを例のごとく書いていきます。

これを何秒か繰り返し再生させて、死亡を表現します。

パラパラ漫画をUnityで再生させる方法はこちら
[UNITY]アクションゲームを作る(パラパラ漫画)[1]
[UNITY]アクションゲームを作る(キャラクターを動かす)[2]

下準備

まずは死亡アニメーションから作っていきます。

アニメーションはこんな感じになります。
死に終わった(?)ら画面が静止状態に戻って再スタートするのでこれでいいかなと思います。

次に画像の暗転です。
UIのImageを用意して画面全体を真っ黒にしてあげます。

このあとImageを空オブジェクトに入れて不可視状態にします。

これを死んだときに可視にすると、画面が暗転する寸法です。

プログラム

今回主に使うプログラムは
○秒後に実行するInvoke関数

Invoke("呼び出すメソッド",○秒後に実行)

キャラクターの位置を指定する関数

this.transform.position = new Vector3([x], [y], [z]);

自クラスのアップデートの機能を停止する

this.enabled = false;

ゲームオブジェクトを可視、不可視状態にする。

[GameObject].SetActive(True/False);

です。

ひとまず、障害物とか今の所ないのでQキーを押したら死ぬようにしてみましょう。
キャラクターコントローラークラス

   /*キャラクター操作メソッド*/
    public bool MoveCharacter()
    {
    ・・・・・・
        if (Input.GetKey(KeyCode.Q))
        {
            return false;
        }
        return true;
    }
  //死亡時に呼び出される
    public void DieState() {
        animator.SetBool("Die", true);
        rb.gravityScale = 0;
        rb.velocity = Vector2.zero;
    }
    //リトライ時に呼び出される
    public void RetryState()
    {
        this.transform.position = new Vector3(0, 0, 0);
        rb.gravityScale = 1;
        animator.SetBool("Dash", false);
        animator.SetBool("Die", false);
    }

戻り値をfalseにしてあげます。これで死んだことを一括管理しているメインコントローラに教えてあげます。

次に暗転させるクラス
UIコントローラクラス

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

public class UIController : MonoBehaviour
{
    public GameObject dieBackground;
    private float MoveTime;
    // Start is called before the first frame update
    void Start()
    {
   }
    public void DeadCanvas(bool flg)
    {
        dieBackground.SetActive(flg);
    }
}

最後にメインコントローラ
メインコントローラークラス

public class MainController : MonoBehaviour
{
    public GameObject MainCharacter;
    public GameObject Camera;
    public GameObject Canvas;
    private UIController UIScript;
    private MainCharacterController CharacterScript;
    private CameraController CameraScript;

    // Start is called before the first frame update
    void Start()
    {
        //棒人間作成
        MainCharacter = Instantiate(MainCharacter);
        CharacterScript = MainCharacter.GetComponent();

        //カメラにカメラコントローラーとキャラクタをセット
        Camera.AddComponent().mainCharactor = MainCharacter;
        CameraScript = Camera.GetComponent();

        //キャンバスのスクリプトをセット
        UIScript = Canvas.GetComponent();

    }

    // Update is called once per frame
    void Update()
    {
        //カメラを動かす
        CameraScript.MoveCamera();

        //キャラクターを動かす
        if (!CharacterScript.MoveCharacter()) {
            //死亡モーション
            DeadController();
        };
    }
    void DeadController()
    {
        CharacterScript.DieState();
        this.enabled = false;
        //1.5秒後暗転
        Invoke("RetryMethod", 1.5f);
    }

     private void RetryMethod()
    {
        UIScript.DeadCanvas(true);
        //1.5秒後リスタート
        Invoke("ReStartMethod", 1.5f);
    }

    private void ReStartMethod()
    {
        CharacterScript.RetryState();
        this.enabled = true;
        UIScript.DeadCanvas(false);
    }
}

まとめるとこんな感じです。(UMLの書き方忘れた…)

こんなかんじで死亡モーションが完成しました。

次は自爆以外で死にたいですね。
ということで、タイムリミットを設定していきましょう
タイムリミットを設ける

コメント

タイトルとURLをコピーしました