江上宿六です。
前回言った対処したい問題というのは、なんとなく分かると思うんですけど、
これ二度タッチが出来るんです。 これやるととんでもない速度で飛んでいくので
ゲームとしては放置しておけません。 なのでそこをなんとかします。
フラグを宣言しました。 publicにはしません。
こちらはpublicな関数で、フラグを立てるSetFlagとフラグの状態を判定する
CheckFlagを宣言しています。
Update内です。 フラグが立っている場合はTime.deltaTimeを使って時間計測。
フラグが立って1秒が経過したらフラグを消してます。 Sphere側はこんな感じで
良いと思います。 続けてCube側のスクリプトを編集します。
OnCollisionEnter内。 Sphereと衝突した時、この当たったSphereのフラグを
CheckFlagで取得し、フラグが立っていない時に限り衝突時の処理を行い、
SetFlagでフラグを立てています。 これでとりあえず二度タッチを防げます。
では次に床に乗っているSphereの数を取得し、数によってPlaneを下げるという
処理をやりたいと思います。 思いついた処理はPlane用にスクリプトを用意し
OnCollisionStayで数を計算するものでしたが、これは上手く行きませんでした。
理由としてはこのOnCollisionStay等の呼ばれるタイミングが不定期というか
Update関数の呼び出しとの流れが今一つ噛み合ってない感じなのです。
なので別の方法を考えてやってみました。 とりあえずGameDirectorの
スクリプトを編集していきます。
Planeに乗っている数をカウントする変数countと、カウントを増減させる
publicな関数2つです。 これを何処で使うのかというと、SphereControllerです。
Sphereが接触したらカウントを増やし、離れたらを減らすようにしました。
こうする事で乗っている数を取得する事は出来るハズです。
GameDirectorスクリプトの方にカウントを取得出来る関数を作りました。
この値を参照してPlaneを下げる処理を行いましょう。 Plane用のスクリプトを
追加して記述していきましょう。
もはやこういう関数の使い方も慣れたと思います。 GameDirectorを取得する
GameObjectを宣言しStartでFind、GetComponentでpublicな関数を呼びます。
このカウントが5以上ならPlaneのyを-0.01f移動させるようにしました。
アタッチして実行してみましょう。
5個以上乗っかった時から徐々に下がっていってるのが分かると思います。
乗ってる数が増えたら下がるスピードを上げたりするのも良いでしょう。
さて、これで想定していた処理は殆ど行えたと思います。 あとは床の高さが
0になった時にゲームオーバーという風にしてやれば、完成と言えますかね。
という所で今回は終わりです。
次回はシーンの移動あたりをやります。