P5.エアホッケー.14「パックの初動をランダムに」
パックが出る時、いつも同じ方向だとツマンナイのでランダム化する。(Random (Float)
、Random (Integer)
、・・・)
パックの初期値設定
❶ On Init
部分でパックの出る方向とスピードを決めている訳だが、単一の値を入れるだけじゃなくす(ランダム化させる)ため、中身が複雑になる。なので、ゴチャゴチャしないよう、今のうちにイベント化("SET_MY_DIR")させておく。下図のように変更する。
❷ そしたら~、イベント本体を作っていこう。下図。
❷-1 Random (Float)
: Min(最小値) ~ Max(最大値) で与えられた間の数値をランダムで出す。もちろん出て来る数値は Float型。
ま~、「Min ≦ 出て来る数値 < Max」って事だよ。Float型の場合はあんまり気にしないでイイと思うけど、最大値ピッタリの値は含まない。
これを使って、"myDir" にセットする X と Y の値をランダム化する。Y は "プラス10~20" の値になっているから注意。ここでランダム "プラマイ20" で出そうとすると、"0" に近い数値が出たときパックがいつまで経っても前(または後)に進まないことになってしまうからな。
❷-2 Random (Integer)
: Min(最小値) ~ Max(最大値) で与えられた間の数値をランダムで出す。もちろん出て来る数値は Integer型。
上と同様「Min ≦ 出て来る数値 < Max」って事。最大値は含まないから注意。
「Min:0、Max:2」ってことは「0、1、2」の3つの内どれかが出るんじゃなくて、「0、1」のどちらかが出て来るって事な。"2" は含まないかなら。(ホント、こういうの分かり難いな。なんでこういう設計にすんだろうか?)
これで出た数値と "0" を比較してんだから 1/2 で True になるよね。で、もし True だったら、
❷-3 前もやったけど、こうやって "-1" を掛けて Y のプラマイを反転させてる。これで、Y は "-20 ~ -10"、または "+10 ~ +20" のどっちかになるって寸法だ。これでパックが出たとき、自分の方に進むか敵の方に進むかのランダム化が出来た。よかったよかった。
〇 ランダムで数値を出せるのは、他にもRandom (Boolean)
、Random (Vector)
、Random (Color)
がある。使い方は、もう感覚で分かるはず。
インクルード - イクスクルード
Random (Integer)
では Min は含んで、Max は含まないってやったろ。だから、例えばすごろくゲームでサイコロを振る時にさ、こんなスクリプトを組んじゃうとさ、
永遠に "6" の目が出ないサイコロになっちゃうわけよ。
「含む」は英語で include(発:インクルード)、「含まない」は exclude(発:イクスクルード)だから、「インクルード - イクスクルード」って言って覚えるのよ。
または、「Min ≦ 出て来る数値 < Max」だから、「Min Max、以上 未満」とかなんかでもいいけどね。
とにかく、含むか含まないか、「あれ? どっちだっけ?」って、分かんなくなっちゃうから、口に出して覚えるようにしようぜ。
Print
でデバグ
でも、やっぱ「忘れたー」ってなったら、適当なオブジェクトにこんなスクリプトを貼り付けて確認すればいい。
・Print
ノード: コンソール画面に入力された Value を表示させる。
つまり、上のスクリプトは、W キーが押されたらRandom (Integer)
で出てきた数値を表示させるというもの。
で、コンソールとは? そう、Debug Console にチェックした時のあれだ(ココ参照)。
思い通りの数値が出てるかな?
または、メインメニュー Window > Toggle System Console(ココ参照)。
あー。
本日のポイント
- ランダムは、「インクルード-イクスクルード」。
- どうなってんのか見たくなったら、
Print
。
〇 次回、自分のマレットを動かす。"Tenjyo" って覚えてるかな(ココ参照)? これの存在意味がやっと解明されるゾ。