前回に引き続き、「ワガハイ式ビリヤード」のゲーム制作ページになります。前回で、ゲームに必要なオブジェクトの作成・配置は一通り完了しました。今回は物理特性の設定や、ゲーム上、あると便利な補助オブジェクトを追加していきます!
今回のゲームは、これまでのワガハイ式ゲームとは異なり、物理的な挙動を用いたゲームになっています。よって、物体の質量、空気抵抗、摩擦力、跳ね返り係数、…など物理的な特性値を設定する必要があります。その辺りを順番に設定していきましょう!
注1:今から紹介する設定値については、今回のワガハイ式ビリヤードで設定した値であり、決して現実に即した値でありません(極力現実っぽくしようと心がけましたが…)。あくまで、参考値?として下さい。m(_ _)m
注2:本ブログでは説明順の都合上、スクリプトを書く前にこれらの値を紹介していますが、実際の制作過程においては、これらの値はスクリプトを一通り書いた後、ゲーム完成直前に決定しました(それまでは暫定値を入れてました)。ゲームを一通り完成しないと、どれ位の値が良いのか分かりづらいと思いますので、皆様が同様のゲームを制作される際も、(明らかな場合を除き、)物理的な特性値は基本最後に決めることをオススメします。
・Mass:質量(1)
・Drag:(真っ直ぐ進む際の)空気抵抗(0.6)
・Angular Drag:(回転に対する)空気抵抗(0.3)
・Use Gravity:重力に影響される or されない(今回は重力無し)
・Constraints:拘束成分(今回はZ方向には進まない)
これを見て違和感を持たれた方はなかなかカンが鋭いですが、実は今回のビリヤードでは重力を入れてません。よって、決して球が地面上にあって地面との摩擦で止まる訳では無く、球は空間内のとある平面内(今回はZ=0平面内)にムリヤリ拘束され、その平面内で自由に移動し、空気抵抗により止まるゲームになっています。この時点で現実と違うやん…(笑)。
参考で、下に比較動画を載せました。空気抵抗なしだといつまでたっても球が止まりませんし、これは流石に非現実的ですね…。
<空気抵抗Drag=0場合>
<空気抵抗Drag=0.6場合>
・Dynamic Friction:動摩擦係数(0)
・Static Friction:静止摩擦係数(0)
・Bounciness:跳ね返り係数(1)
ざっくり言いますと、まず摩擦力は、球が他の球や、壁と跳ね返る際に作用します。摩擦力が大きいと、跳ね返りの時に球は止まりやすくなります。今回は0なので、跳ね返りの際には摩擦はかからない=減速しない、という状況です。
次に、
・跳ね返り係数0=球が、他の球や壁と当たると、全然跳ね返らない
・跳ね返り係数1=球が、他の球や壁と当たると、失速せずに、そのままの速度で跳ね返る
間の値を取ると、これらの中間(ちょっと速度が落ちて跳ね返る)になります。今回はあまり当たっても失速してほしくなかったので、1にしました。
こちらも、参考で、下に比較動画を載せました。摩擦が大きく、跳ね返り係数が小さいと、球が当たった後、めっちゃ失速するので、全然球が散らばっていないのをご理解頂けると思います。まぁ、多少散らばった方がゲームとしては面白いですから、今回は上のような設定にしました。
<摩擦係数=100、跳ね返り係数=0.5場合>
<摩擦係数=0、跳ね返り係数=1場合>(上の<空気抵抗Drag=0.6場合>と同じ動画)
次に、現実のビリヤードには無いですが、ゲームとしては、あると便利な補助オブジェクトを幾つか追加していきます。この辺りは各々のゲーム制作の工夫ポイントになると思います。ゲーム上、決して必須なものではないですが、制作したゲームより分かり易く、より楽しく、より操作し易いゲームとなるよう、どんどん工夫していきましょう!!
前回、「Cylinder」とか「Sphere」の3Dオブジェクトを組み合わせてキューを作成しましたが、実はこのセットにはもう一つ、黄色い「Cylinder」オブジェクトが付いています。右図中矢印で示してある奴です。これにより、今のキューの角度でどの方向に手球が飛んでいくかをヒント的に表示してあります。これも、ゲームを少しでもスムーズに進められるようにするための工夫策です。小さいオブジェクトですが、あるのと無いのとでは結構調節の難易度は変わると思います。
以上で、オブジェクトの配置や各種設定は決まりましたので、次回からスクリプトを実際に書いていきます!次回もよろしくお願いします!!