Unity備忘録19頁目「ゲーム的な処理を作る2」

江上宿六です。

 

前回言った対処したい問題というのは、なんとなく分かると思うんですけど、

これ二度タッチが出来るんです。 これやるととんでもない速度で飛んでいくので

ゲームとしては放置しておけません。 なのでそこをなんとかします。

f:id:y6yegami:20180722171606p:plain

フラグを宣言しました。 publicにはしません。

f:id:y6yegami:20180722171612p:plain

こちらはpublicな関数で、フラグを立てるSetFlagとフラグの状態を判定する

CheckFlagを宣言しています。

f:id:y6yegami:20180722171617p:plain

Update内です。 フラグが立っている場合はTime.deltaTimeを使って時間計測。

フラグが立って1秒が経過したらフラグを消してます。 Sphere側はこんな感じで

良いと思います。 続けてCube側のスクリプトを編集します。

f:id:y6yegami:20180722173353p:plain

OnCollisionEnter内。 Sphereと衝突した時、この当たったSphereのフラグを

CheckFlagで取得し、フラグが立っていない時に限り衝突時の処理を行い、

SetFlagでフラグを立てています。 これでとりあえず二度タッチを防げます。

 

では次に床に乗っているSphereの数を取得し、数によってPlaneを下げるという

処理をやりたいと思います。 思いついた処理はPlane用にスクリプトを用意し

OnCollisionStayで数を計算するものでしたが、これは上手く行きませんでした。

 

理由としてはこのOnCollisionStay等の呼ばれるタイミングが不定期というか

Update関数の呼び出しとの流れが今一つ噛み合ってない感じなのです。

なので別の方法を考えてやってみました。 とりあえずGameDirectorの

スクリプトを編集していきます。

f:id:y6yegami:20180722195727p:plain

f:id:y6yegami:20180722195731p:plain

Planeに乗っている数をカウントする変数countと、カウントを増減させる

publicな関数2つです。 これを何処で使うのかというと、SphereControllerです。

f:id:y6yegami:20180722201934p:plain

Sphereが接触したらカウントを増やし、離れたらを減らすようにしました。

こうする事で乗っている数を取得する事は出来るハズです。

f:id:y6yegami:20180722201327p:plain

GameDirectorスクリプトの方にカウントを取得出来る関数を作りました。

この値を参照してPlaneを下げる処理を行いましょう。 Plane用のスクリプト

追加して記述していきましょう。

f:id:y6yegami:20180722202944p:plain

もはやこういう関数の使い方も慣れたと思います。 GameDirectorを取得する

GameObjectを宣言しStartでFind、GetComponentでpublicな関数を呼びます。

このカウントが5以上ならPlaneのyを-0.01f移動させるようにしました。

アタッチして実行してみましょう。

f:id:y6yegami:20180722203253p:plain

5個以上乗っかった時から徐々に下がっていってるのが分かると思います。

乗ってる数が増えたら下がるスピードを上げたりするのも良いでしょう。

 

さて、これで想定していた処理は殆ど行えたと思います。 あとは床の高さが

0になった時にゲームオーバーという風にしてやれば、完成と言えますかね。

 

という所で今回は終わりです。

次回はシーンの移動あたりをやります。