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

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

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

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】