【Unity】Unityでちゃんと銃から弾を撃つ方法!

【Unity】Unityでちゃんと銃から弾を撃つ方法!

Unityで銃の方向に弾を出す方法を少し悩んだのでメモ。
基本的な事しか書かないので、初心者さん用に書いておきます。

普通に玉を出すと…

普通に玉を出すときは通常、以下のようなプログラムを書いて玉を発車させると思います。

実際にやってみると、玉が指定の座標から出てるけど、挙動がおかしい!

どうやって直すか

どうやって直すかいろいろみていたところ、以下のサイトが参考になりました。

【Unity】RigidBodyについて

AddForce      グローバル座標の軸に対してrigidbodyに力を追加します。
AddTorque      グローバル座標の軸に対してrigidbodyにトルクを追加します。
AddRelativeFor​​ce ローカル座標にの軸にrigidbody相対に力を追加します。
AddRelativeTorque ローカル座標にの軸にrigidbody相対にトルクを追加します。

なので、AddForceの部分をAddRelativeFor​​ceにすれば良いとのことでした!

グローバル座標とローカル座標?

今回のプログラムで一番大事なところが、このグローバル座標とローカル座標の話です。

unityで初めに作るときはグローバル座標やローカル座標は特に気にしなくてもいいようですが、銃やプレイヤーなどのオブジェクトから親オブジェクトや子オブジェクトを作るときは注意が必要みたいです。

子オブジェクトを作ると親オブジェクトの座標・角度(グローバル座標・角度)とは違う、子オブジェクト独自の座標・角度(ローカル座標・角度)が適応されます。その時にaddforceとAddRelativeFor​​ceがめっちゃ混同しやすい。。。

まぁ、しっかりと考えてみれば当たり前なのですがね。。。

サンプルプログラム

余談なのですが、unityroomを始めたのでブラウザでそのプロジェクトの動作が確認できます。
https://unityroom.com/games/masafy_howtomakegun

左がちゃんと動作しない方で、右が動作する方です。(日本語表示がunityroomはできないみたい。。。)

プログラム全体がみたい人用にパケージファイルも置いておきます。
(いつか追加します。)

おわり