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

unityパズルゲームの作り方

前回の講座記事では、入力処理を実装しました。

前回の記事↓

入力処理の作り方 ~マウスの動かし方と座標の取得法~
unityパズルゲームの作り方講座の第4回ではタグを使った衝突判定とボール落下処理を実装しました。 前回の記事↓ 第5回では、マウス入力の処理を作成していきます。 マウス入力の検知 まずは、TouchManagerと...

第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関数内に追加しています。

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

今回はこれで以上です。

おさらいと次回予告

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

次回は、応用編になります。ボールを増やす処理と3つ以上揃ったときにボールを消す処理を書いていきます。

次回の記事↓

ボールの種類を増やす/ボールが3つ以上揃ったら消去する処理
前回の第6回の記事では同じ色のボールをなぞって消す処理を作りました。 前回の記事↓ 今回の第7回と次回の第8回では、第6回で作成した同じ色のボールをなぞると消える処理を改良してつながっている3つ以上の同じボールをなぞると...
【必見】無料資料請求でスクエアエニックスのゲーム開発の企画動画が見れる学校アリ
令和時代のゲームクリエイターになるための必須スキルがUnity。未経験からでもUnityを学んでオリジナルゲーム制作&ゲーム会社就職が可能なゲーム専門学校・プログラミングスクールの情報をオンライン&対面形式に分けてまとめました。 無料資料請求でスクエアエニックスのゲーム開発企画の動画もらえるので見てみるといいですよ。
unityパズルゲームの作り方
unity入門の森 ゲームの作り方

コメント

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