近いボールだけなぞれる/違う色のボールをなぞれなくする方法

unityパズルゲームの作り方

第8回は、第7回で途中であったのつながっている3つ以上の同じボールをなぞると消える処理の解説を引き続き行います。

第7回ではボールの種類を作成していきました。

今回は次の2項目を作成していきます。

  • 近くのボールを検出する処理
  • 違うボールをなぞれないようにする処理

近くのボールを検出する処理

近くのボールを検出するために、ボール1つの選択範囲を広げることを考えていきます。選択範囲とは、第2回で説明したコライダーのことです。そのため、ボールのコライダーを追加して選択範囲を広げてみましょう。

まずは、プレハブのBallをダブルクリックしてBallのみ表示されるようにしてください。

そして、Ballの子オブジェクトとして空のゲームオブジェクトを作成して、Collisionという名前にしましょう。そして、次のようにSphere Colliderを設定してください。

ここで、Sphere ColliderのRadius(半径)を0.8に設定すると、ボールの周囲に緑色の枠が表示されることが確認できます。この範囲がボールの周囲の範囲となります。

しかし、この状態で実行すると新しく作成したSphere Colliderの分だけ衝突判定が広くなってしまうため、ボール間に隙間ができてしまいます

そのため、次のようにSphere ColliderのisTriggerにチェックを入れてください。こうすることにより、新しいコライダーでは実際の衝突はせずに衝突判定のみ実行させることができるようになります。

それでは、TouchManager.csのif(Input.GetMouseButton(0))の中身を以下のように書き換えてください。

追加した部分は、「どこもタッチしていないときは消す」の部分です。タッチした数はh.Lengthで取得できるため、タッチしていない状態(タッチしている数が0個 → h.Length == 0のとき)はelseでくくるとできることが分かります。

この状態で実行してみましょう。次のように何も触れていないとき選択が解除される様子が確認できます。

違うボールをなぞれないようにする処理

それでは、違うボールをなぞれないようにする処理を作成していきましょう。

TouchManager.csのUpdate関数の次のコードに書き換えてください。

追加した部分は2つあります。まず、if文の中の次のコードです。

これを使うことにより、最初に選択したボールの種類(touchBallList[0].GetComponent<BallObject>().color)と現在選択しているボール(h[0].collider.GetComponent<BallObject>().color)が同じかどうかを判別できます。

2つ目は次のコードです。

こちらのif文の中を分割して読み解くと以下の条件式が組み合わされていることが分かります。

  • 「h[0].collider.tag==”Ball”」でタッチしたゲームオブジェクトがボールであるか
  • 「touchBallList[0].GetComponent<BallObject>().color!=h[0].collider.GetComponent<BallObject>().color」で最初のボールの色と選択したボールの色が一致していないか

この二つを組み合わせると「タッチしたボールの色が最初のボールの色と一致していない場合」実行する条件式であることが分かります。

この状態で実行してみましょう。次のように、種類が違う場合にボールの選択が解除される様子が確認できます。

おさらいと次回予告

今回で、ゲームのメイン部分が完成しました。

次回は、追加要素として、周囲のボールを一気に消す爆弾の設定をしていきたいと思います。

コメント

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