【Unity】Unityで3D野球盤をつくろう日記 4日目:ボールを撃ち出す処理と、バットで打ち返す処理

投稿日:2016年11月28日

(日記のまとめページはこちら:https://wakky.tech/unity-baseball-game/

前回はバットを回転させるスクリプトを書いた。今回はバットに向けてボールを撃ち出して、それを打ち返すところまでつくる。……とあっさり書いたけど、今回はなかなかの難所だった。

 

ボールを撃ち出す処理

ボールを撃ち出して転がすには、以下のチュートリアルを参考にすると良さそう。

https://github.com/unity3d-jp/FirstTutorial/wiki/2.%E3%83%95%E3%82%9A%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%E3%81%AE%E7%A7%BB%E5%8B%95

とりあえず、3D Object → Sphere で適当な大きさのボールを置いて、名前を「Ball」に変更。バットを少し手前に置きすぎていたので、奥の方に位置を調整した。物理演算を有効にするために、右下の Add Component → Physics → Rigidbodyを選択。

また、BatにもRigidbodyを追加した。それと、以下で詳しく書くけど、Fixed JointでBatをつなげるためにBatterにもRigidbodyを追加。そして、Ballに以下のScriptを追加(なんかインデントがおかしいけど・・・)。

https://gist.github.com/WakkyFree/7e4fcf8d195d8e5c6c48ec748dc8b34d/bdcaadffbcc6acac71ba494d9b720bffc8b973ca

Updateに処理を書くと力が加わり続けてしまうので、最初一発だけ力が加わるように、StartにAddForce処理を書いた。これで、再生と同時にボールが撃ち出されるようになった。のちのちゲームとしてつくり込んでいくときには複数回ボールを投げないといけないので、修正が必要だと思う。まぁ、とりあえずボールを打ち返す流れをまず一通り作りたいので、今回はこのままで。

 

ボールをバットで打ち返す処理

バットのスイング処理は前回つくったので、後は再生してボールでバットを打つだけ・・・なのだが、ボールがバットをすり抜けてしまう。色々調べてみて、最終的にrigidbodyやcollisionの設定を変更すれば対処できた。最終的なBall、Bat、BatterのIncpectorの設定を以下にのっけておく。

Ball

Bat(ボールを打ちやすいように45℃傾けた)

Batter

細かい部分は省略するが、ポイントだけ以下にまとめておく。

 

RigidbodyのConstraints設定

Rigidbodyは、Constraintsの設定で、動く方向を制限することができる。今回の場合、Batは高さ方向(Y軸方向)に動くことはないので、Freeze PositionのYにチェックを入れる。Ballも同様に、Freeze PositionのYにチェックを入れる。Batterに関しては、後述のFixed Jointしたときに制約を付けないとフラフラ動いてしまったので、X、Y、Zのすべてのチェックを入れて、完全に固定した。

 

collisionの範囲指定

collisionでは、オブジェクトの接触判定が有効になる範囲を指定することができるので、BatやBallの大きさに合わせて設定する。RadiusやHeightの値をいじるとcollisionの範囲を表す線の範囲が変わるので、ちょうどいい大きさになるように範囲を変更する。

 

オブジェクトの接続をFixed Jointに変更

BatterとBatを親子関係にしていると、「IsTrigger」をオフにした場合に、バットが勝手に変な方向に回転してしまい、うまく打ち返せなかった(上の記事にある「ぶつかる対象とのレイヤーを確認」の部分にあたるのかな?)。そのため、BatをBatterから出して同じ階層に配置し、BatにFixed Joint設定を追加してBatterに固定することにした。
Batを選択し、右下の Add Component → Physics → Fixed Jointを選択。そこで、Connected Bodyの右のボタンを押して、接続先を「Batter」に指定する。Fixed Jointでは、Rigidbodyが設定されたオブジェクトしか接続先に選べないので注意。

まだちょっと動作が怪しいけど、とりあえずボールを打ち返す動作はできた。次は、より野球盤っぽくなるようにテクスチャを張り付けたりしてみようかな。

0

投稿者: wakky

映画と旅行が大好きなエンジニア。お酒、ゲーム、読書も好き。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください