ボールの種類を増やす/ボールが3つ以上揃ったら消去する処理

unityパズルゲームの作り方

Unityの本格ゲーム制作講座はこちら
【30日間の全額返金保証付き】

前回の第6回の記事では同じ色のボールをなぞって消す処理を作りました。

前回の記事↓

タッチ操作でボールをなぞって消す処理 ~配列で管理しよう~
前回の講座記事では、入力処理を実装しました。 前回の記事↓ 第6回は、このゲームの中心部でもある、同じ色のボールをなぞると消える処理を作成していきます。 ただし、この処理を一気に作ろうとするととても難しいです。なの...

今回の第7回と次回の第8回では、第6回で作成した同じ色のボールをなぞると消える処理を改良してつながっている3つ以上の同じボールをなぞると消える処理を作っていきます。

前半の選択したボールのカウントでは、選択したボールの数を数え、3つ以上であれば削除する処理を説明していきます。

後半のボールの種類の設定では、次の3項目に分けて段階的に説明していきます。

  • 種類の追加
  • 近くのボールを検出する処理(第8回で解説)
  • 違うボールをなぞれないようにする処理(第8回で解説)

選択したボールのカウント

前回までのコードでは、1個や2個のような少ない数でも選択したボールが消えてしまうようになっていました。そのため、3個以上選択したらボールが消えるようにする処理に書き換えていきます。

まずは事前準備として、BallObject.csを次のように書き換えていきます。

isTouchは選択しているかどうかを意味する変数として定義しています。これまででは、選択しているボールでもタッチしていれば選択した数を増やしてしまっていたため、この変数を使ってそれを防止します(また、Update関数内でisTouchによりEmissionの色が自動で変わるように変えました)。

それでは、ボールの数をカウントする処理を書いていきましょう。TouchManager.csのUpdate関数を次のように書き換えてください。

if分に先ほど定義したisTouch変数を組み合わせています。

以下のようすると、タッチされていないボールの時、if文の中身が実行されるようになります。

そして、このif文の中身は次のようになっています。

一行目でisTouchをtrueにしているため、次から選択されているボールがif分岐に入ることがなくなります。これでカウント数を正しくすることができました。

さらに、TouchManager.csのReleaseobject()を次のコードに書き換えます。

このコードでは、まず、選択したボールを記憶している配列touchBallListの要素数をtouchBallList.Countで取得し、cntに代入しています。そして、cntが3以上であれば選択したボールを削除するようにif文を使って分岐させています。

このようにすると、次のような動作になります。選択したボールが3つより少ない場合、選択しても消えなくなっていることが確認できます。

ボールの種類の設定

マテリアルの色を変えてボールの種類を作っていきましょう。

まずは、ボールの種類を列挙型を使って定義します。GameResources.csという名前の新しいスクリプトを作成してください。ここで注意なのですが、GameResourcesクラスは、Start関数やUpdate関数などがあるMonobehaviorを継承したクラスとしては利用しないので、一度自動で生成されるコードを全消去して、次のコードだけになるように書き換えてください。

今回は、red、blue、green、purpleの4種類のボールを設定します。

種類の追加方法

このゲームでは、ボールが生成されるタイミングに種類が決まっていればいいので、ここで久しぶりの登場となるBallGenerator.csからボールが生成される処理にボールの種類を決める処理を加えていきます。

では、BallObject.csを次のように書き換えてください。

先ほど追加した、GameResources.BallColor型の変数colorを定義して、ボールの種類を設定できるようにしました。そして、ChangeColor関数により、colorでAlbedoの色が変わるようにしています。

さらに、BallGenerator.csを次のように書き換えましょう。

このコードではnamespace System.Linq;を使用していますが、これは少し難しい処理を扱うときに使用するため、今回の使い方のみ解説していきます。

追加した部分は、Update関数の最終行の次のコードです。

gameObject.GetComponent<BallObject>().colorは先ほど設定したボールの種類を設定する部分です。

Enum.GetValues(typeof(GameResources.BallColor)).Cast<GameResources.BallColor>().ToList()[UnityEngine.Random.RandomRange(0,4)]; }がとてもややこしいことになっていますが、それぞれ次のような処理を行っています。

  • Enum.GetValues(typeof(T)):Tの列挙型を配列にする処理
  • Cast<T>():T型に変換する処理
  • ToList():リストに変換する処理
  • UnityEngine.Random.RandomRange(a,b):a~(b-1)の範囲のランダムな値を返す関数

つまり、列挙型を配列に→配列からランダムに1つ取得という処理を一行にまとめたコードとなります。

この書き方は、今回のゲーム開発に覚える必要はないので、「指定した列挙型のランダムな値を返す処理」と考えてもらえればよいです。

では、この状態で実行してみましょう。色の違う生成されるボールが生成されていく様子が確認できます。

処理の流れとしては、

  1. GameResourses.csで色情報を格納した列挙体を作成
  2. BallGenerator.csでボールオブジェクトを生成し、列挙体のcolorパラメータに値を乱数で設定
  3. ボールオブジェクトが生成されたら、BallObject.csのstart関数の中のChangeColor.cs関数が呼び出され、実際に色が変わる。

という形になっています。

 

おさらいと次回予告

今回は、ボールの設定の3項目の中の

  • 種類の追加

を解説してきました。

さて、かなりゲームが完成に近づいたと思いますが、メイン部分で残っている実装部分は次の2つです。

  • 種類の違うボールを選択しない処理
  • 近くのボールの検出

これらを実装しないと、次のような結果となります。

現状、

  • 違うボールでも選択した状態になってしまうためパズル要素がない状態
  • 遠くのボールをなぞっても選択した状態

という課題が残っています。これらを第8回で解決していきます。

次回の記事↓

近いボールだけなぞれる/違う色のボールをなぞれなくする方法
第8回は、第7回で途中であったつながっている3つ以上の同じボールをなぞると消える処理の解説を引き続き行います。 第7回ではボールの種類を作成していきました。 前回の記事↓ 今回は次の2項目を作成していきます。 ...

Unityの本格ゲーム制作講座はこちら
【30日間の全額返金保証付き】
【必見】無料資料請求でスクエアエニックスのゲーム開発の企画動画が見れる学校アリ
令和時代のゲームクリエイターになるための必須スキルがUnity。未経験からでもUnityを学んでオリジナルゲーム制作&ゲーム会社就職が可能なゲーム専門学校・プログラミングスクールの情報をオンライン&対面形式に分けてまとめました。 無料資料請求でスクエアエニックスのゲーム開発企画の動画もらえるので見てみるといいですよ。
unityパズルゲームの作り方
unity入門の森 ゲームの作り方

コメント

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