見出し画像

【Unity C#】キャンディークラッシュ風マッチ3パズルの作り方 #8 タイル交換

このレクチャーでは
前回作った関数を使って、実際の2つのタイルの交換処理
を作っていきます。



Start関数の一番下にモードの指定を追加

Start関数のタイル生成の下に最初のモードを指定する行を追加します

// Start is called before the first frame update
void Start()
{
    // フィールドデータ作成
    fieldTiles = new TileController[fieldWidth, fieldHeight];
    // ゲーム画面のフィールド作成
    field.transform.localScale = new Vector2(fieldWidth, fieldHeight);

    // リザルト画面非表示
    panelResult.SetActive(false);

    // タイル生成
    SpawnTiles();

ここから

    // 最初のモード
    gameMode = GameMode.Touch;

ここまでを追加

}

解説

Updateで最初に入るモードを指定しています


タッチ開始処理

TouchModeにタッチした時の処理を追加します

// タッチできるモード
void TouchMode()
{
    // タッチした時
    if (Input.GetMouseButtonDown(0))
    {
        // スクリーン座標からワールド座標に変換
        Vector2 worldPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        // レイを飛ばす
        RaycastHit2D hit2d = Physics2D.Raycast(worldPoint, Vector2.zero);

        // 当たり判定があった場合
        if (hit2d)
        {
            // 触ったタイルのインデックス
            swapIndexA = WorldToIndexPosition(hit2d.transform.position);
            // 押下された座標
            touchDownPoint = worldPoint;
            // タッチ開始フラグ
            isTouchDown = true;
        }
    }

}

解説

この処理は、画面をクリックしたときの処理で
当たり判定があった場合、そのタイルのインデックスと
タッチした場所、タッチ開始のフラグを保存します。

    // タッチした時
    if (Input.GetMouseButtonDown(0))
    {
    
    }

マウスの左クリックを押したタイミングで処理に入ります。
スマホ等では画面のタッチにあたります。

        // スクリーン座標からワールド座標に変換
        Vector2 worldPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);

ユーザーのタッチの位置(スクリーン座標)を、ゲームのワールド座標に変換します。
これにより、ゲーム世界のどこにタッチがあったかを特定できます。

        // レイを飛ばす
        RaycastHit2D hit2d = Physics2D.Raycast(worldPoint, Vector2.zero);

ワールド座標にレイ(見えない直線)を飛ばして、何かに当たったかどうかを検出します。

        // 当たり判定があった場合
        if (hit2d)
        {

        }

レイキャストが何かに当たった場合、この条件は真となります。
Colliderが設定されているゲームオブジェクトが反応するので、今回はタイルのオブジェクトに当たった場合に処理に入ってきます。

        // 当たり判定があった場合
        if (hit2d)
        {
            // 触ったタイルのインデックス
            swapIndexA = WorldToIndexPosition(hit2d.transform.position);
            // 押下された座標
            touchDownPoint = worldPoint;
            // タッチ開始フラグ
            isTouchDown = true;
        }

タッチを離した時に使う変数をセットします。
触ったタイルは交換用の1つ目のタイル
押下された座標は、離された座標との差分を取ってどのタイルと交換するかを判別するため
タッチ開始フラグは、タッチ終了の処理にだけ入ってしまうのを防ぐためにセットしていします。


タッチ終了処理

タッチした時の処理の下に else if でタッチが離された時の処理を追加します

ここから先は

2,777字 / 2画像

この記事が参加している募集

ゲームの作り方

この記事が気に入ったらサポートをしてみませんか?