ゲーム「ワガハイ式ぷよぷよ」 制作手順2-3

落下中の組ぷよに付けるスクリプトを記述しよう3

このページでも、前回から引き続き、落下中の組ぷよに付けるスクリプトを記述していきます。今回は、組ぷよの基本的挙動その3として挙げました、どちらかのぷよが着地すると組ぷよの動きが終了についてスクリプトに書いていきます。

スクリプトを書く前に、もう少し噛み砕いていこう

「どちらかのぷよが着地」を噛み砕く(=より丁寧に言い換える)と?

・どちらかのぷよが地面に着地した時

・どちらかのぷよが他のぷよの上に着地した時

このどちらかになります。今回、これらの条件はそれぞれの別のスクリプト文で書いていきます。

「組ぷよの動きが終了」を噛み砕くと?

ぷよに付けるスクリプトの仕組みその前にもう一度制作手順1で書いた作戦を復習しましょう。細かくスクリプトを書いている時こそ、全体像(=作戦)を忘れないようにすることが重要です!!

制作手順2-1から書いてきているのは2個の組ぷよ(子)の親である空オブジェクト(親)に付けるスクリプトです。で、どちらかのぷよが着地したら、この空オブジェクト(親)を消滅させて、組ぷよとしての挙動は完了!という話でしたね。

よって、「組ぷよの動きが終了」を言い換えると、空オブジェクト(親)が消滅という意味になります。

まとめると、今回書くスクリプトの概要は?

言い換え前:どちらかのぷよが着地すると組ぷよの動きが終了

→言い換え後:どちらかのぷよが地面 or 他のぷよの上に着地した時、空オブジェクト(親)が消滅する

スクリプトを書く上で、こういった言い換え・噛み砕きは非常に大切です。スクリプトを書いている最中に考えても良いですが、出来れば書く前に作戦を固めておきたいですね。

なお、空オブジェクト(親)消滅後の各ぷよの挙動については、また別ページにて書いていきます(制作手順3-1~に書いていく予定)。ここでは、あくまで空オブジェクト(親)の消滅までに付いてのスクリプトを書いていきます。

基本的挙動3「組ぷよの落下終了」をスクリプトで記述しよう

では、いよいよスクリプトを書いていくのですが、今回はとりあえず、前回スクリプトで書いた左右回転を使わず、基本的な形(0°回転の状態)のまま落下していく状況のみを考えます。コレ、結構重要なことになります。「なんで~?」という声もあると思いますが、一旦受け入れて下さい、お願いします。m(_ _)mm(_ _)m

地面に着地した時、空オブジェクト(親)が消滅

組ぷよ落下終了条件その1 地面着地まずは比較的簡単に書ける、地面に着地した時、空オブジェクト(親)が消滅をスクリプトに書いていきます。

回転していない時は親オブジェクトは下のぷよと同じ位置に居ます。また右図より、下の地面に着地する時、下ぷよ(親オブジェクト)の中心のY座標=-5.5fになります。

よって、親オブジェクトの中心のY座標=-5.5fになれば、空オブジェクト(親)が消滅と書けば良さそうですね!ここまで分かればあとはいけそうです!引き続き、Updateメソッド中に書いていきます。

2行目で親子関係を解除して、3行目でもう不要となった空オブジェクトを削除します。

丸め誤差対策を実装しよう

ただこの文、実はちょっと微妙で、思い通りにいかない危険性があります。それは、コンピューター上で一般的に計算する際に現れる、丸め誤差という悪者が現れる可能性があるからです。特に小数点型(float)とかで計算してる際、計算結果がピッタリ思い通りにいかず、めっちゃ小さいズレ(0.000001f大きいとか小さいとか)が発生する可能性があるんです(これはUnity関係なくプログラミングやってると必ず現れる現象です)。

これが原因と分からず、合うはずの計算が合わなくて苦しんでると、「もうPC計算なんて何も信じられへん…プログラミング嫌…」ってなります。お気持ち分かります。でもプログラミングやるからには、この丸め誤差と上手に付き合っていく必要があります。

そこで今回は、こんな風に書き換えます。丸め誤差を取り除く方法は幾つかあると思いますが、今回はこんな方法を取ります。

Mathf.RoundToIntは「小数第1位を四捨五入して整数化する」という関数です。要するに、四捨五入を利用して小さい誤差を消してしまおう、という作戦になります。

今回ぷよオブジェクトの中心位置座標は「○.5f」という小数第1位までの値になりますので、小数第2位を四捨五入したいのですが、残念ながらUnityのスクリプト文にはドンピシャそういう関数はありません。そこで上の2、3行目のように書きます。要するに、

1.49999f 【元の数、誤差あり】→(×10)→ 14.9999f →(四捨五入で整数化)→ 15 →(÷10)→ 1.5f【本当に欲しい数】

これで欲しい数が得られます。さよなら、丸め誤差(⌒ー⌒)ノ~~~

この手法は今後も使っていきますので、しっかり理解しておいて下さい。

今回は長くなりましたので、ここまでです。組ぷよの落下終了条件の話についてはまだまだ一部しか書けてませんので、次回に続きます!

シェアする

  • このエントリーをはてなブックマークに追加

フォローする