タッチ操作でボールをなぞって消す処理 ~配列で管理しよう~

unityパズルゲームの作り方

第6回は、このゲームの中心部でもある、同じ色のボールをなぞると消える処理を作成していきます。

ただし、この処理を一気に作ろうとするととても難しいです。なので、次の3部構成で作成していきます。

  • タッチしたボールの消去
  • なぞったボールの判定
  • なぞったボールを配列に入れる

タッチしたボールの消去

まずは、タッチしたボールを消去する処理を作っていきましょう。TouchManager.csのUpdate関数を次のように書いてみてください。

ここのDestory関数は名前の通り、第一引数のゲームオブジェクトをシーン上から消去する関数です。そのため、衝突した物体のゲームオブジェクトを上記のように参照することによりタッチしたゲームオブジェクトを消去することができます。

では実行してみましょう。クリックしたボールが消えていることが確認できます。

しかし、選択したら消えるのではなく色が変わるようにしたいため、マテリアルの色を変えていきます。

まずは、おさらいも兼ねて、BallマテリアルのAlbedoを変更してマテリアルの色を次のような水色に変えてみましょう。ここで注意ですが、Ballの編集はプレハブ内のBallで行ってください。

そして、このインスペクタをよく見てみると、Emissionというチェック項目があることが分かります。これは、物体が発光するようなエフェクトをかけたいときにチェックを入れる項目です。また、Emissionの下のColorから発光色も変えることができます。今回の記事では、Emissionを使用してボールを選択している状態を表示していくことにします。Emissionにチェックを入れておきましょう。

そして、BallObject.csを次のようなコードに書き換えてください。

追加したRendererとは、マテリアルやメッシュを描画するためのクラスです。ゲームオブジェクトのマテリアルをスクリプト上で編集したい場合には上のようにRendererが参照できるようにします。

さらに、TouchManager.csのUpdate関数を次のように書き換えてください。

SetColor関数は、指定した色を変える関数です。例えば、第一引数を”_Color”にすればAlbedoの色を変更できます。今回は”_EmissionColor”を指定しているためEmissionの色が変わるようになります。ちなみに、この第一引数に入れる文字列は正しい文字列を入れないとうまく起動しません。この文字列の場所を探すためには、マテリアルのインスペクタ右上の詳細ボタンをクリックしてDebugを選ぶ必要があります。すると、表示が切り替わったインスペクタ上のSaved PropertiesのColorsに「_Color」と「_EmissionColor」があることがわかります。

コードを書き終えたら、BallObjectのインスペクタ上のRendererにプレハブのBallをドラッグ&ドロップしましょう。

この状態で実行してみてください。クリックしたボールの色が変化する様子が確認できます。

なぞったボールの判定

次に、同じ種類のボールをなぞっていく処理を作成していきます。なぞる動作は、マウスボタンをクリックしている状態の時に行う動作であるため、GetMouseButton関数を使用していきます。

TouchManager.csのUpdate関数を下のコードに書き換えてみましょう。

このコードの重要な点は、以下の記述です。

この一行は、細かく分けてみるとわかりやすくなります。

  • h[0].collider:触れたゲームオブジェクトのコライダー
  • GetComponent().renderer:BallObjectコンポーネント中の変数renderer
  • renderer.material:rendererにあるマテリアル
  • material.SetColor関数:マテリアルの色を設定する関数
  • SetColor(“_EmissionColor”,new Color(1f,1f,0,0.5f)):Emissionのカラーを黄色に設定
    これを一行にまとめると、触れたゲームオブジェクトのマテリアルのEmissionのカラーを黄色に設定する処理であることが分かります。

この状態で実行してみましょう。なぞったボールの色が変化する様子が確認できると思います。

なぞったボールを配列に入れる

次は、タッチしていったボールを配列に入れて選択されたボールを扱いやすくします。

TouchManager.csを下のように書き換えてみましょう。

今回は、ボールを何個なぞっても配列に格納できるようにするため、動的配列を使用しています。動的配列とは、配列の要素数を後から増やしたり減らしたりすることのできる配列です。基本的には以下の手順で使うことを覚えておけば問題ありません。

  1. var tmp = new List<T>(); で初期化
  2. tmp.Add(hoge); でhogeを追加
  3. tmp.Clear(); で要素を全消去

また、タッチしたゲームオブジェクトをすべて削除する関数でであるReleaseObject関数を作成し、GetMouseButtonUp関数内に追加しています。

この状態で実行してみましょう。ボタンを離すとなぞったボールが消えることが確認できます。

今回はこれで以上です。

おさらいと次回予告

今回は、同じ色のボールをなぞると消える処理を作成していきました。

次回は、より深い部分の処理を書いていきます。

コメント

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