[UNITY]アクションゲームを作る(タイムリミットを設ける)[7]

えんちゃですよおおおお。

前回は死亡イベントを作りましたね
せっかく作ったんだから、自爆だけじゃなく、やられたいよねー。

ということで、今回はタイムリミットを設定していきます。

早速作っていきましょう。
時間表記といったら右上な気がするので、右上にUI > Text を設置します。

今回、大事なのは

Time.deltaTime

Mathf.CeilToInt([float])

の2つだけです

Time.deltaTime は Updateメソッド内で使用できる特殊な関数で
前回Updateを呼ばれてから今までの時間が格納されています。

Update関数は1f = 0.13秒ごとに呼ばれているわけではないので、
ハイスペックだと猛スピードで動き、ロースペックだとゆっくり動いてしまうため、使用機種によって難易度に差が出てしまいます。
なのでTime.deltaTimeを使用して、速さを一定にしていきましょう。

もう一つ Mathf.CeilToInt([float])は切り上げしてInt型に変換してくれる便利な関数です。これを使わないと切り捨てになるため、0になってからゲームオーバーまで1秒ほど猶予があるのでおすすめしません。

UIコントローラには

  1. 時間を初期設定して画面にセットする。
  2. カウントする。
  3. 死亡時、時間を初期状態に設定し、セットする。

メインコントローラには

  1. UIコントローラの1を画面更新毎に呼び出す。
  2. 時間が0になったら死亡モーションを呼び出す。
  3. 死んだ時、UIコントローラの3を呼び出す。

を作っていきます。
UIコントローラ

public class UIController : MonoBehaviour
{
    public Text Timer;
    private float TimeLimit;
    private float MoveTime;
    // Start is called before the first frame update
    void Start()
    {
        TimeLimit = 10;
        MoveTime = TimeLimit;
        Timer.text = TimeLimit.ToString();
    }

    public bool TimeController(float deltaTime)
    {
        MoveTime = MoveTime - deltaTime;
        Timer.text = Mathf.CeilToInt(MoveTime).ToString();
        if (MoveTime <= 0.0f)
        {
            return false;
        }
        return true;
    }

    public void SetReStartTime()
    {
        MoveTime = TimeLimit;
    }

  ・・・・・・
} 

メインコントローラ

public class MainController : MonoBehaviour
{
  ・・・・・・
    void Update()
    {
     ・・・・・・
         //時間を計算する
        if (!UIScript.TimeController(Time.deltaTime))
        {   
            //死亡モーション
            DeadController();
        };
       ・・・・・・
    }

    private void ReStartMethod()
    {
        UIScript.SetReStartTime();
     ・・・
    }

    void DeadController()
    {
     /*死亡イベント*/
    }
}

ここまで来るのに長かった、あと横スクロールアクションで絶対に必要なもの、、、、、
ゴール作ってねぇ!ということで次回はゴールですかね

ゴールを設定する

コメント

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