【Unity6】ひよこをスワイプして消す!ScreenToWorldPoint, Input.mousePosition【ツムツム風3】
Unity5.0.0f4 Personal(2015年5月)
前回の続きです〜
前回まででゲームスタート時にひよこを大量発生させることができましたので、今回はこのひよこをクリックしてなぞり、3つ以上繋がっていたら消えるというルールと追加しましょう〜
【目標】ひよこを指でなぞり、3つ以上繋がっていたら消す!
【課題1】はじめてクリックした時の処理
まずはクリックした時の処理であるOnDragStartメソッドを、前回作成したballScriptに追記します〜以下ソースです!
変数がいくつか追加されました〜firstBallは一番最初にクリックされたボールを格納し、lastBallは一番最後にクリックされたボールを格納し、currentNameはボールの名前(Piyo0〜Piyo4)を格納し、removableBallListは削除するボールを格納する配列です〜
removableBallListはListという型が使われていますが、これは動的に長さを変えられる配列です〜ちなみにListを使う時は、「using System.Collections.Generic;」とスクリプト冒頭に書いて下さい〜
まずはUpdateメソッドで画面をクリックし、まだfirstBallに何も入っていない時、OnDragStartメソッドを呼び出しています〜
OnDragStartメソッドの冒頭ではRaycastHit2Dにより、クリックした位置のオブジェクトを取得しています〜ScreenToWorldPoint(Input.mousePosition)によりクリックした位置をワールド座標(Unityでよく使うx,y座標)に変換し、その位置にレーザーを発射し、何かオブジェクトにぶつかれば取得する、といった形になっています〜
手前から奥へレーザーで突き刺す感じ
取得したオブジェクトのcolliderがnullでなければ、つまり何らかのCollider2Dコンポーネントがついていれば、if文の中の処理を行います〜
if文の中でまずは取得したオブジェクトをhitObjという変数に格納し、再度if文にて、名前の前方に「Piyo」とついているかどうかの判定をしています〜
条件に合っていれば、firstBallとlastBallにオブジェクトを格納し、currentNameに名前を格納しています〜これらの変数は後で使われます〜
最後に削除対象オブジェクトのリストを初期化し、そのリストの中にhitObjを格納するため、hitObjを引数にPushToListメソッドを呼び出します!
PushToListの中では単純にAdd関数を使ってリストに追加しているだけです〜
【課題2】クリック中の処理
続いてクリック中の処理です〜更にballScriptに追記していきます〜
RaycastHit2Dについては、OnDragStartと同じなので割愛致します〜
2つ目のif文は、今取得したオブジェクトの名前と、currentName(OnDragStartメソッドで取得)が同じ&最後に取得したオブジェクトとは別のオブジェクトである場合、という条件を付けています〜
次にhitObjとlastBallとの距離を取得するDistance関数を使っており、距離が1.0f以下ならlastBallを今回取得したオブジェクトに上書きし、removableBallListにAddしています〜
1.0fがどれくらいの距離かと疑問に思うと思いますので、X:-5、Y:-1とX:-5、Y:-2のオブジェクトを用意しました〜
これくらい離れていると消えない
ルールをゆるくしたい時や厳しくしたい時は、if文内の数値1.0fを大きくしたり小さくしたりして下さい〜
【課題3】クリックを終えた時の処理
最後にクリックを終えた時の処理を加筆します〜以下ソースです〜
クリックを終えた時、OnDragEndメソッドを呼び出しています〜
OnDragEndメソッド内ではまず、removableBallListの配列数を取得し、3個以上なら削除処理に入っています〜
削除方法はfor分にて繰り返しDestroyする形をとっています〜
for文が終わったら、ゲームスタート時に50のひよこを作ったDropBallメソッドを実行 し、今削除したひよこの数だけ再度ひよこを生成しています〜
最後にfirstBallとlastBallを初期化しています〜
以上でひよこを3匹以上なぞった時に、ドラッグした分だけ削除する機能が完成しました!
【結果】
中央の赤いひよこをなぞると
消えた!
今回は以上になります〜
ありがとうございました〜
【Unity開発6】ひよこをなぞって消したい!【つむつむ風3】
【Unity開発6】なぞったひよこだけ色を変えたい!【つむつむ風4】
【Unity開発6】ひよこExchangeボタン(更新機能)を作りたい!【つむつむ風6】
【Unity開発6】制限時間とゲームオーバーを実装したい!【つむつむ風7】