センティッドさんでリボルバーを発砲する。(Avatar3.0でパーティクル設定)

本日は前回からの続きでセンティッドさんの持っているリボルバーで発砲するシステムを紹介します。

拳銃タイプであれば他のアバターでも参考になるかと思います。


右手にリボルバーを持てる状態から始めるため、ホルスターからリボルバーを取り出す方法については前回のnoteを見ていただければと思います。


発砲システムとはつまりどういう物かというと

①:弾丸を射出するパーティクル

②:射出時に銃口が光る(マズルフラッシュ)パーティクル

③:着弾した所が弾けるパーティクル

この3つのパーティクルで構成することができます。

大変そうですがこの中で②と③についてはAssetStoreから無料のAssetを利用するので特に難しいことはしません。


まずは前準備として、パーティクルの発生する右手に設定とパーティクルの大元を作成します。

画像1

アバターのArmature下「Right_Hand」を選択し、右の詳細にて「AddComponent」をクリックし「Rigidbody」を追加します。

画像2

中の設定値で初期値から変更するところは

Angular Drag:0

UseGravity:チェック無


次にアバター上で右クリック⇒CreateEmptyでオブジェクトを作成

名前を「ShootSystem」とします。

画像3

作成した「ShootSystem」を選択し、「AddComponent」をクリックし「FixedJoint」を追加します。(FixedJointを追加するとRigidbodyも追加されます。)


画像4

Rigidbodyの設定はRight_Handと同じです。

FixedJointの設定はConnectedBodyのエリアに左エリアのRight_HandをD&Dして設定します、他は初期値のままです。

画像5

D&Dすると上記のイメージになります。

これで右手を動かすとパーティクルの発生位置も右手に合わせて動くようになりました。


ここから①のパーティクルを作成していきます。

作成した「ShootSystem」を右クリック⇒Effect⇒ParticleSystemでパーティクルを作成します、名前は「BulletSystem」とします。

画像6

最初作った状態では足元から白い球がたくさん浮き上がってきます。


画像7

「BulletSystem」の以下の設定値を変更します。(記載のない項目は初期値になります。)

~ParticleSystem~

Looping:チェック無

StartSpeed:1

SimulationSpace:World

~Emission~

Rate over Time:0

Bursts:+をクリックして行を追加

 Count:1 (他の項目は初期値)

~Shape~

Shape:Box

Scale:0,0,0

上記の設定を行った後、シーン内の「Restart」をクリックすると白い球が1つだけゆっくりと移動するのが確認出来るようになります。


画像8

銃弾の発射位置などを確認するため一時的に右手に持っているリボルバーを表示状態にします。


ShootSystemの位置と向きを調整し、弾丸がちょうど銃口から出るように配置します。

画像9

画像10

いろいろな角度から「Restart」をクリックで射出してみて、リボルバーの向きの沿って弾丸が進んでいくことを確認してください。


画像11

弾丸の発生位置と射出方向が決まったら再度「BulletSystem」の設定を変更します。

~ParticleSystem~

Duration:0.1

StartLiftTime:0.1

StartSpeed:100

StartSize:0

~Renderer~

左のチェックを外す

※弾丸は早くて見えないのでそもそも描画せず見えなくしちゃいます。


次に②のマズルフラッシュパーティクルを作成します。

まず、AssetStoreから「Unity  Particle」で検索して「Unity Particle Pack 5.x」をインポートします。(Freeです)

画像12

画像13

インポートが完了するとProject内にEffectExampleディレクトリが作成されます。

画像14


「EffectExamples > WeaponEffects > Prehabs」 下にある

「MuzzleFlashEffect」をシーン上にD&Dします。

画像15


画像16

「MuzzleFlashEffect」を選択した状態で「Restart」をクリックすると光が広がるエフェクトが確認できます。


画像39

「MuzzleFlashEffect」を「BulletSystem」にD&Dします。


画像43

「MuzzleFlashEffect」のSimulationSpaceを「World」に設定します。


画像40

画像41

画像42

「BulletSystem」と同様に「MuzzleFlashEffect」の位置と方向、大きさを調節して銃口から光が見えるよういろんな角度からRestartを駆使して設定します。


画像21

位置調整が出来たら「BulletSystem」の設定画面を再度開き、以下の設定を変更します。

~SubEmitters~

左のチェックを入れる

Birth

None(ParticleSystem)の所に「MuzzleFlashEffect」をD&D

この設定で、「BulletSystem」が発生時(Birth)に「MuzzleFlashEffect」が合わせて発生するようになります。


次に③着弾した部分が弾けるパーティクルを作成します。

「EffectExamples > WeaponEffects > Prehabs」 下にある

「BulletImpactMetalEffect」をシーン上にD&Dします。

画像22


画像23

「BulletImpactMetalEffect」を選択した状態で「Restart」をクリックすると弾けるエフェクトが確認できます。


画像24

「MuzzleFlashEffect」と同様に「BulletImpactMetalEffect」を「BulletSystem」にD&Dします。


画像25

画像26

「BulletImpactMetalEffect」と「BulletImpactMetalDust」の「SimulationSpace」を「World」に変更します。


画像28

「BulletImpactMetalEffect」下に配置された「Decal」を削除します。


画像27

「BulletImpactMetalEffect」を選択し、詳細内にある「DecalDestoroyer(Script)」を削除します。(右上の歯車からRemoveComponent)


画像29

「BulletSystem」の設定画面を再度開き、以下の設定を変更します。

~Collision~

左のチェックを入れる

Type:World

Dampen:1

Bounce:0

LifetimeLoss:1

~SubEmitters~

+をクリックして行を2つ追加

両方ともCollision

None(ParticleSystem)の所に「BulletImpactMetalEffect」をD&D

None(ParticleSystem)の所に「BulletImpactMetalDust」をD&D

これでBulletSystemのパーティクルがコライダーにぶつかったときに2つのパーティクルが発動するようになりました。


画像30

設定後、「BulletSystem」を選択して「Restart」をクリックすると着弾のパーティクルは見えなくなります。(ぶつかる物がないので)


画像31

アバター上で右クリック -> 3D Object -> Planeで足元に板を出します。

画像32

この状態で同様に「Restart」を実行すると、銃の向いている延長上で板とぶつかる箇所に着弾のパーティクルが発生していることが確認できます。

確認出来たら作成したPlaneは削除します。

これで弾丸射出、マズルフラッシュ、着弾すべてのパーティクルが作成完了となります。

最後にこれらのパーティクルを発生させるための設定を行います。


画像33

デフォルトでは発砲しないため、「BulletSystem」は無効状態にします。


次に「BulletSystem」を有効にするアニメーションと無効にするアニメーションを作成します、作成する手順はリボルバーを構えるための記事と同じ流れです。

今回は「Shoot_ON」と「Shoot_OFF」のアニメーションを作成します。

「AddProperty」からBulletSystemのIsActiveを追加してONとOFFでそれぞれアニメーションを作成します。

画像37

画像35

画像36

※チェックボックスの設定箇所は0:00と1:00で2か所なのに注意


画像38

リボルバーを構えるために利用したFXアニメーターを選択しAnimator画面を表示します。

新規で「Shoot」レイヤーを作成します。※歯車マークでWeightを1にするのを忘れないよう。

その後、作成したアニメーションを「Shoot_OFF」、「Shoot_ON」の順でD&Dします。


画像38

「Shoot_OFF」と「Shoot_ON」で右クリック->Make Transisionでそれぞれ矢印でくっつけます。


今回は発砲する条件を

・リボルバーを右手に持っている

・リボルバーを持っている手をグー(Fist)にしたとき

とします。

画像39

まず、「Shoot_OFF」から「Shoot_ON」へ向かう矢印の設定

Has Exit Time:チェックを外す

TransitionDuration:0

Conditions

Revolver Equals 1(リボルバーを右手に持っている)

GestureRight Equals 1 (右手がFist状態である)


画像40

次に、「Shoot_ON」から「Shoot_OFF」へ向かう矢印の設定

Has Exit Time:チェックを外す

TransitionDuration:0

Conditions

GestureRight NotEquals 1 (右手がFist以外の状態である)


これにて設定完了です、最後に一時的に出していた右手のリボルバーを非表示にします。

画像41


アップロード後、VRChat内でExpressionメニューからリボルバーを右手に持ち、右手をグーにすることで発砲することができます。

グー以外にして再度グーにすれば連射できるので人差し指でトリガーを引く感覚で連射ができるかと思います、お疲れさまでした!

マズルフラッシュと着弾については他にもフリーのパーティクルはたくさんあるので自分で気に入ったものを探してみてもいいですね。

画像42






この記事が気に入ったらサポートをしてみませんか?