読者です 読者をやめる 読者になる 読者になる

Unity5(C#)初心者・入門者向けチュートリアル ひよこのたまご

AndroidやiOS向けアプリを簡単に作れるゲーム開発環境Unity(ユニティ)の使い方を、チュートリアル方式で一緒に学びましょう!

【Unity6】ひよこをスワイプして消す!ScreenToWorldPoint, Input.mousePosition【ツムツム風3】

Unity 2D パズル チュートリアル

いつもひよこのたまごをご利用下さいましてありがとうございます!
おかげ様でチュートリアル数も10ゲーム目となりました!
チュートリアル一覧は
こちら からどうぞ!


スポンサーリンク

Unity5.0.0f4 Personal(2015年5月)

f:id:hiyotama:20150518132929p:plain

 

前回の続きです〜

前回まででゲームスタート時にひよこを大量発生させることができましたので、今回はこのひよこをクリックしてなぞり、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座標)に変換し、その位置にレーザーを発射し、何かオブジェクトにぶつかれば取得する、といった形になっています〜

 

f:id:hiyotama:20150512192711p:plain

手前から奥へレーザーで突き刺す感じ

 

取得したオブジェクトの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のオブジェクトを用意しました〜

 

f:id:hiyotama:20150513112210p:plain

これくらい離れていると消えない

 

ルールをゆるくしたい時や厳しくしたい時は、if文内の数値1.0fを大きくしたり小さくしたりして下さい〜

 

【課題3】クリックを終えた時の処理

最後にクリックを終えた時の処理を加筆します〜以下ソースです〜

 

 

クリックを終えた時、OnDragEndメソッドを呼び出しています〜

 

OnDragEndメソッド内ではまず、removableBallListの配列数を取得し、3個以上なら削除処理に入っています〜

 

削除方法はfor分にて繰り返しDestroyする形をとっています〜

for文が終わったら、ゲームスタート時に50のひよこを作ったDropBallメソッドを実行 し、今削除したひよこの数だけ再度ひよこを生成しています〜

 

最後にfirstBallとlastBallを初期化しています〜

 

以上でひよこを3匹以上なぞった時に、ドラッグした分だけ削除する機能が完成しました!

 

【結果】

 

f:id:hiyotama:20150513113403p:plain

中央の赤いひよこをなぞると

 

f:id:hiyotama:20150513113431p:plain

消えた!

 

今回は以上になります〜

ありがとうございました〜

 

【Unity開発6】下準備【つむつむ風1】

【Unity開発6】ひよこを発生させる【つむつむ風2】

【Unity開発6】ひよこをなぞって消したい!【つむつむ風3】

【Unity開発6】なぞったひよこだけ色を変えたい!【つむつむ風4】

【Unity開発6】スコア機能を付けたい!【つむつむ風5】

【Unity開発6】ひよこExchangeボタン(更新機能)を作りたい!【つむつむ風6】

【Unity開発6】制限時間とゲームオーバーを実装したい!【つむつむ風7】