【日本語】 UE4 ホッケーゲーム part.17 パックを物理で動かす 【チュートリアル】
マレットが動くようになったので、今度はパックの番だ。気持よくバコーンと弾きたいよね。だが先に、ちょっと残念なお知らせだ。ブループリントを使ってパックを作るのかなって思った人もいるかもしれないが、ブループリントは使わない。普通のスタティックメッシュで作る。ゴメンな。その代わりに、簡単な物理の設定(physicsとconstraints)を解説するので勘弁してくれ。では、ゲームにパックを追加していこう。
----------
- [Cylinder] を1つ追加して、レベル上に置く
- "Puck" にリネーム。分かりやすい名前ならなんでもイイ
- マレットと同じ大きさでは都合が悪いので、[z] のスケールを "0.4" に
特に問題ないと思うが、パックって動くんだから、"Static" から "Movable" にしないといけないのでは? という疑問が出るはずだ。マレットの時に盛大にやらかしたのだからな。ま、その通りで、"Movable" にするにはするのだが、その前にちょっと、ここにチェックを入れてもらいたい。
[Details] > [Physics] > [Simulate Physics] だ。
そうすると、自動的に "Movable" にオレンジマークが移動するハズだ。
[Physics](フィジックス)は「物理」ということで、[Simulate Physics] にチェックを入れるということは、文字通り「物理シミュレート」を行うように設定したっていうことだ。物体は重力によって落ちて行くし、サイコロみたいなものは振れば転がるし、壁に当たれば跳ね返る。丸い玉なら坂道を加速しながら下るようになる。
普通に考えれば、物理法則が働けば「モノ」は動くよな。だから、勝手に "Movable" にしてくれたわけだ。納得だろ。
では、ちゃんと[Simulate Physics] にチェックが入っていることを確認してから、テーブルの上にパックが落ちてくるようにして、マレットで弾いてしばらくどんな感じか試してみてくれ。
----------
【注意】
パックをバコーンと打ってテストするには、マレットの移動範囲を一時的に調節してテーブルのどこにでも行けるようにした方が都合がイイ。また、テーブルのゴール部分からパックが出て行ってしまうと戻ってこないので、何らかのスタティックメッシュを置くか、BSPで塞ぐかした方がイイ。
どうだったかな? 優しくツンツン押してる分にはいいかもしれないが、ちょっとキツク当たると、壁を超え、グルグル回ってブッ飛んで行ったのではないだろうか。恐らくコレは、マレットが動く時にパックの中にめり込んでしまって、そこからパックが抜け出そうとする時に強い力がかかりすぎテーブルの表面と激突、そして回転しながら飛んで行くのではないかと思う。(本当は分からないけど・・・。ま~物理なんてこんなもんだよ。)
古いゲームだけど、オブリビオンやスカイリムなんかでも、キャラが空高くぶっ飛んで行く現象があったよな~。あれも、なにかにめり込んで、、、いや失礼、脱線したかな。
----------
この回転ぶっ飛び現象をどうにかするには、パックに働く物理現象のある部分に制限を加えればイイ。それでも、まだぶっ飛ぶけどな、ホントは・・・。
- パックの [z] 位置を "30" に設定
[x] [y] は今のところ、テーブルの上に来ていれば、何でもイイ - [Physics] > [Constraints] >
[Lock Position] の [z] にチェック
[Lock Rotation] の [x] と [y] にチェック
【追加の説明】
[1] "30" に設定したのは、パックを台から10cm浮かせるため。パックは高さが40cm。中心までが20cm。台から10cm浮かすには、"20 + 10" で "30" というわけ。なぜ浮かせた方がいいかというと、本物のエアホッケーでも、摩擦を少なくするために、台から空気が出てパックは浮いているよね。これと同じで、パックと台との摩擦を避けるため・・・。と言いたいところだが実は、理由はもう一つあって、前の方で書いたのだが、台に書く模様(センターラインとか、中心の円とか、ゴール前のエリアとか)はスタティックメッシュの埋め込みで作ってて、台から5cm出っ張っているのだ。1mmでも出っ張ってたら、パックはそこでつっかかってしまう。それを避けるためでもある。というわけで、10cm浮かせている。
[2] ここでパックに起こる物理現象を制限している。非常に重要な項目だ。[Constraints](コンストレインツ) というのは「制約」と言う意味な。ちなみに複数形。[Lock Position] と言うのは、位置をロックしてしまうこと。[z] にチェックを入れたんだから、[z] 位置を固定することになる。[1]で [z] を "30" にしたでしょ。これで、パックにどんな力がかかっても、[z] 位置は常に "30"。重力を受けて落っこちて行くこともないし、枠の高さは "50" あるから、飛び越えて出て行くこともなくなるわけだ。
それから、回転の方をロックしてしまうのが [Lock Rotation] だ。[z] 軸と [y] 軸の回転をロック(禁止)してしまった。これでパックが、UFOのようにクルクルフワフワしなくなり、常にテーブルに対して水平を保ってくれるようになる。いいね。
----------
これで、再度試してみてくれ。前よりかは遥かに良くなっているハズだ。しかし、まだ急激に飛び出したり、壁をすり抜けて行くこともある。この辺はちょっとカンベンな。物理なんてそんなもんだよ、って思ってくれ。
パックが壁をすり抜けてどっかに行ってしまったり、壁に埋まって動かなくなったら、真ん中辺りに出るようにして対応しよう。1面のウィジットにも説明で書いたよね。「パックがはまったら[SPACE]」って。うんうん。
というわけで、今回はここまで。次回は、スペースキーを押すと真ん中ら辺にパックが出るようにブループリントを書いていこう。
では、"Save All"。