銃を撃った時に空薬莢を飛ばす機能をUnityで作成する

今回は銃を撃った時に薬莢を飛ばしてみます。

銃には詳しくないので、どのあたりから薬莢が出てきて、どこへ飛んでいくのかわかりませんが、種類によっても違うみたいです。

詳しく調べてから機能を作成しろよ!

と自分自身に言い聞かせながらてきとうなわたくしはそのまま機能作成に突入するのであった・・・・(謎)

とりあえず、撃ったら薬莢が飛んでいく銃という事に限定しましょう(^_^;)

今回の機能を作成すると、上のような感じになります。

弾のモデルが用意出来なかったので、CapsuleのScaleを調整し、空薬莢として使用しました。

スポンサーリンク

弾の設定と銃に薬莢を飛ばす場所を作成する

bullet11

上のような弾丸の3Dオブジェクトを用意します。

bullet10

弾丸オブジェクトをシーン上に配置し、弾の大きさの調整をし、AddComponentでRigidbodyをつけます。
銃を撃った時に薬莢に力を加えて飛ばす為です。Use Gravityにチェックを入れ重力も働くようにしておきます。

弾にBox Colliderをつけて薬莢が地面の上に散らばるようにします。
衝突判定として使うのでIs Triggerのチェックは外しておきます。
設定が終わったらAssetsフォルダにドラッグ&ドロップしプレハブ化します。シーン上の弾は削除してかまいません。

これで薬莢の準備が出来ました。

次は銃に薬莢が出てくる場所を設定します。

銃のプレハブをシーン上に配置し、BulletExitPositionという名前で空薬莢が出てくる位置を作成します。

bullet12

座標をLocalに変更(重要)し、空薬莢が出ていく方向(青色のZ方向)を調整します。
今回は銃の右後ろ側に調整してください。

bullet13

上のような感じに調整が出来たら、銃のインスペクタでApplyを押し修正をプレハブに反映させます。
反映させたら修正用の銃は消してください。

銃から空薬莢を飛ばすスクリプトをShotスクリプトに追加

それでは銃を撃った時に空薬莢を飛ばすスクリプトを作成します。

今までの記事をご覧いただいた方はShotスクリプトを修正します。

そうでない方は銃を撃った時の処理を行うスクリプトを変更してください。

bulletには薬莢のプレハブ、bulletExitPositionには銃のbulletExitPositionを銃を装備した時に設定します。

銃を撃った時の処理JudgeShotメソッド内に空薬莢の処理を追加します。

Instantiateでプレハブからインスタンスを作成し、位置と角度をそれぞれ指定しておきます。

インスタンスの位置はbulletExitPositionの位置で、角度は銃の角度に合わせて登場させます。

次に空薬莢に設定されているRigidbodyを取得し、AddForceで指定の向きと強さで力を加えます。

弾に力を加える向きはbulletExitPositionの前方方向(青矢印の方向)にし、AddTorqueでランダムな力を回転に加えます。

Random.insideUnitSphereは半径1の球内のランダムな点(Vector3)を取得出来るので、それに360をかけてランダムな値を取得します。

空薬莢は飛んだあと地面と衝突するように指定していますが、空薬莢のインスタンスが増えるとやっかいなので、弾はDestroy(bulletInstance, 3f)を使って3秒後に消しています。

秒数を指定せずDestroy(bulletInstance)とした場合は即座に消えます。

即座に消えると空薬莢が出現と同時に消えるので意味がありませんが・・・。

最後に装備を銃に切り替えた時に銃の情報を取得しているSetComponentメソッドに処理を追加します。

装備した武器の子要素からBulletExitPositionを探してbulletExitPositionに設定します。

これで銃を撃った時に空薬莢を飛ばす処理は完成しました。

Unityの実行ボタンを押して確認してみましょう。

bullet14

上のように空薬莢が右後ろに飛んで行くようになりました。

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます