読者です 読者をやめる 読者になる 読者になる

スマゲ

スマートなゲームづくりを目指して日々精進

Unityでパズドラ風3Matchパズルを作る_その6_ステータス表示編

今回はコンボ表示を行いたいと思います。

■前回の内容
Unityでパズドラ風3Matchパズルを作る_その5_演出編4 - スマゲ

■本編の完成イメージ
f:id:sanukin39:20170504223636g:plain

■コード確認用リポジトリ
github.com

■環境
Mac OS Sierra 10.12.4
Unity 5.6.0 f3
言語 C#

■UI表示用のクラスをつくる
スクリプト[UIManager.cs]を作成し、以下のように記述します

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

// UI関連の表示を行う
public class UIManager : MonoBehaviour {

    // public.
    public Text statusText;
    public Text comboText;

    // private.
    private int comboCount = 0;

    //-------------------------------------------------------
    // Public Function
    //-------------------------------------------------------
    public void SetStatusText(string status)
    {
        statusText.text = status;
    }

    public void ResetCombo()
    {
        comboCount = 0;
        UpdateComboText();
    }

    public void AddCombo()
    {
        comboCount++;
        UpdateComboText();
    }

    //-------------------------------------------------------
    // Private Function
    //-------------------------------------------------------
    private void UpdateComboText()
    {
        comboText.text = string.Format("{0}combo", comboCount);
    }
    
}

■ゲームオブジェクトの作成
シーン内に空のゲームオブジェクトを作成し[UIManager]に名前を変更、作成した[UIManager.cs]をアタッチする

■表示処理
[GameManager.cs]の[SerializeField]に作成したUIManagerを登録して、ステータスの表示処理、コンボの初期化処理を記述します

    [SerializeField]
    private UIManager uiManager;

    // ゲームのメインループ
    private void Update()
    {
        switch (currentState)
        {
            case GameState.Idle:
                Idle();
                break;
            case GameState.PieceMove:
                PieceMove();
                break;
            case GameState.MatchCheck:
                MatchCheck();
                break;
            case GameState.DeletePiece:
                DeletePiece();
                break;
            case GameState.FillPiece:
                FillPiece();
                break;
            case GameState.Wait:
                break;
            default:
                break;
        }
        uiManager.SetStatusText(currentState.ToString());
    }

    // プレイヤーの入力を検知し、ピースを選択状態にする
    private void Idle()
    {
        if (Input.GetMouseButtonDown(0))
        {
            uiManager.ResetCombo();
            SelectPiece();
        }
    }

■コンボカウント
先ほどと同様に[Board.cs]にも[UIManager]の[SerializeField]を作成し、コンボのカウント処理を追加します。場所はピースを削除する場所です。

    [SerializeField]
    private UIManager uiManager;

    // マッチングしているピースを削除する
    public IEnumerator DeleteMatchPiece(Action endCallBadk)
    {
        foreach (var piece in board)
        {
            if (piece != null && IsMatchPiece(piece))
            {
                var pos = GetPieceBoardPos(piece);
                DestroyMatchPiece(pos, piece.GetKind());
                uiManager.AddCombo();
                yield return new WaitForSeconds(0.4f);
            }
        }
        endCallBadk();
    }

■まとめ
ある程度パズルの部分はできたので、このシリーズは一旦ここで終了しようと思います。
コードは以下にまとめてあるので、よかったら御覧ください。
github.com

■関連リンク
Unityでパズドラ風3Matchパズルを作る_その1_ロジック編 - スマゲ
Unityでパズドラ風3Matchパズルを作る_その2_演出編1 - スマゲ
Unityでパズドラ風3Matchパズルを作る_その3_演出編2 - スマゲ
Unityでパズドラ風3Matchパズルを作る_その4_演出編3 - スマゲ
Unityでパズドラ風3Matchパズルを作る_その5_演出編4 - スマゲ