今回は選択されているピースがわかりやすいように演出を追加してみます。
■前回の内容
Unityでパズドラ風3Matchパズルを作る_その3_演出編2 - スマゲ
■本編の完成メージ
■コード確認用リポジトリ
github.com
■環境
Mac OS Sierra 10.12.4
Unity 5.6.0 f3
言語 C#
■実装
ここからはその3の続きです。
■選択されたピースを半透明にする
[Piece.cs]をエディタで開いて、以下のメソッドを追加します
// ピースの透過を設定する public void SetPieceAlpha(float alpha) { var col = thisImage.color; col.a = alpha; thisImage.color = col; }
その後、[GameManager.cs]を開いて定数を追加とメソッドの編集を行います
・定数の追加
private const float SelectedPieceAlpha = 0.5f;
・メソッドの編集
// プレイヤーの入力を検知し、ピースを選択状態にする private void Idle() { if (Input.GetMouseButtonDown(0)) { selectedPiece = board.GetNearestPiece(Input.mousePosition); selectedPiece.SetPieceAlpha(SelectedPieceAlpha); currentState = GameState.PieceMove; } } // プレイヤーがピースを選択しているときの処理、入力終了を検知したら盤面のチェックの状態に移行する private void PieceMove() { if (Input.GetMouseButton(0)) { var piece = board.GetNearestPiece(Input.mousePosition); if (piece != selectedPiece) { board.SwitchPiece(selectedPiece, piece); } } else if (Input.GetMouseButtonUp(0)) { selectedPiece.SetPieceAlpha(1f); currentState = GameState.MatchCheck; } }
■選択されたピースを大きく表示する/b>
選択されているピースをわかりやすくするように、ピースの選択時に新しいピースのゲームオブエジェクトを生成し、サイズを調整、指に追随するようにします。
[Board.cs]を開いて以下のように変更する
・pieceWidthのアクセッサを変える
// public public int pieceWidth;
・プレハブのインスタンス生成部分を切り出す
// ピースのオブジェクトを生成する public Piece InstantiatePiece(Vector3 createPos) { var piece = Instantiate(piecePrefab, createPos, Quaternion.identity).GetComponent<Piece>(); piece.transform.SetParent(transform); return piece; }
// 特定の位置にピースを作成する private void CreatePiece(Vector2 position) { // ピースの位置を求める var piecePos = GetPieceWorldPos(position); // ピースの生成位置を求める var createPos = new Vector2(position.x, height); while (pieceCreatePos.Contains(createPos)) { createPos += Vector2.up; } pieceCreatePos.Add(createPos); var pieceCreateWorldPos = GetPieceWorldPos(createPos); // ピースを生成、ボードの子オブジェクトにする var piece = InstantiatePiece(pieceCreateWorldPos); piece.SetSize(pieceWidth); // 生成するピースの種類をランダムに決める var kind = (PieceKind)UnityEngine.Random.Range(0, Enum.GetNames(typeof(PieceKind)).Length); piece.SetKind(kind); // 盤面にピースの情報をセットする board[(int)position.x, (int)position.y] = piece; // アニメーションのセット fillPieceAnim.Add(new AnimData(piece.gameObject, piecePos, FillPieceDuration)); }
[GameManager.cs]を開いて以下のように変更する
・変数の追加
private GameObject selectedPieceObject;
・メソッドの追加
// ピースを選択する処理 private void SelectPiece() { selectedPiece = board.GetNearestPiece(Input.mousePosition); var piece = board.InstantiatePiece(Input.mousePosition); piece.SetKind(selectedPiece.GetKind()); piece.SetSize((int)(board.pieceWidth * 1.2f)); piece.SetPieceAlpha(SelectedPieceAlpha); selectedPieceObject = piece.gameObject; selectedPiece.SetPieceAlpha(SelectedPieceAlpha); currentState = GameState.PieceMove; }
・呼び出し部分の編集
// プレイヤーの入力を検知し、ピースを選択状態にする private void Idle() { if (Input.GetMouseButtonDown(0)) { SelectPiece(); } } // プレイヤーがピースを選択しているときの処理、入力終了を検知したら盤面のチェックの状態に移行する private void PieceMove() { if (Input.GetMouseButton(0)) { var piece = board.GetNearestPiece(Input.mousePosition); if (piece != selectedPiece) { board.SwitchPiece(selectedPiece, piece); } selectedPieceObject.transform.position = Input.mousePosition + Vector3.up * 10; } else if (Input.GetMouseButtonUp(0)) { selectedPiece.SetPieceAlpha(1f); Destroy(selectedPieceObject); currentState = GameState.MatchCheck; } }
■実行
■その5_演出編
次回はマッチングしているピースが消える演出をつけようと思います。
Unityでパズドラ風3Matchパズルを作る_その5_演出編4 - スマゲ
■関連リンク
Unityでパズドラ風3Matchパズルを作る_その1_ロジック編 - スマゲ
Unityでパズドラ風3Matchパズルを作る_その2_演出編1 - スマゲ
Unityでパズドラ風3Matchパズルを作る_その3_演出編2 - スマゲ
Unityでパズドラ風3Matchパズルを作る_その5_演出編4 - スマゲ
Unityでパズドラ風3Matchパズルを作る_その6_ステータス表示編 - スマゲ