(日記のまとめページはこちら: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に以下のスクリプトを追加する。
ちょっと冗長な書き方だけど、GroundとBat以外と接触した場合はDestroy(this.gameObject)が実行されてBallが消去される。これで壁にボールがぶつかったとき、ボールが消えるようになった。次は、ぶつかった部分に応じて得点が入るようにしようと思う。