【Unity】Unityで3D野球盤をつくろう日記 6日目:壁に当たったボールを消す処理の追加

投稿日:2016年12月6日
最終更新日:2019年1月19日

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

現状だと、壁にぶつかったボールがそのまま残ってしまっており、複数回ボールを打つときの障害になる。直近やることとしては

・ボールがあたった壁に応じてスコアを加算する
・一回だけではなく、複数回ボールが撃ち出されるようにする。

という感じだけど、今回はオブジェクトが衝突したときの処理の入門ということで、ぶつかったボールを消す処理を実装する。オブジェクトの衝突処理を行うためには、OnCollisionEnterを使うと良いらしい。OnCollisionEnterのリファレンスはこちら↓

https://docs.unity3d.com/ja/current/ScriptReference/Collider.OnCollisionEnter.html

これからスクリプトを書いてボールに付加するわけだけど、ボールがバットに当たったか、壁に当たったかを判別して、壁に当たったときだけボールを消す必要がある。(バットに当たってボールが消えたら野球にならないので・・・笑)そこで、バットに「タグ」を付ける。タグを使えば、何のオブジェクトが衝突したか判別して、処理を変えることができる。タグについてはこちら↓

https://docs.unity3d.com/ja/current/Manual/Tags.html

壁全部にタグを付けると大変なので(後で結局つけるかもしれないが)、Batにタグを付けて、Bat以外と衝突したBallを消す、という処理にしたいと思う。

 

タグの追加

まず、「Bat」を選んでInspectorからTagを選択し、Add Tag..を選ぶ。

そこでTagを新たに登録する画面が出るので、「Bat」のようにタグ名を入力する。

すると、先ほどのTagメニューから「Bat」が選択できるようになるので、Batを選択してタグ付けする。

ここまで書いて気付いたけど、床とも接触することになるので、Groundにもタグ(タグ名はGround)を付けて、「BatとGround以外のオブジェクトとBallが接触したら、Ballを消す」という仕様にしたいと思う。これでタグの設定は完了。

 

OnCollisionEnterでBallを消去

Ballに以下のスクリプトを追加する。

https://gist.github.com/WakkyFree/be41a8d14b898377990249bfd3615047/e195de2d603a4f7a7ccb735039c81ee7d6077f3c

ちょっと冗長な書き方だけど、GroundとBat以外と接触した場合はDestroy(this.gameObject)が実行されてBallが消去される。これで壁にボールがぶつかったとき、ボールが消えるようになった。次は、ぶつかった部分に応じて得点が入るようにしようと思う。


投稿者: wakky

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

コメントを残す

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

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