センティッドさんでリボルバーを発砲する。(Avatar3.0でパーティクル設定)
本日は前回からの続きでセンティッドさんの持っているリボルバーで発砲するシステムを紹介します。
拳銃タイプであれば他のアバターでも参考になるかと思います。
右手にリボルバーを持てる状態から始めるため、ホルスターからリボルバーを取り出す方法については前回のnoteを見ていただければと思います。
発砲システムとはつまりどういう物かというと
①:弾丸を射出するパーティクル
②:射出時に銃口が光る(マズルフラッシュ)パーティクル
③:着弾した所が弾けるパーティクル
この3つのパーティクルで構成することができます。
大変そうですがこの中で②と③についてはAssetStoreから無料のAssetを利用するので特に難しいことはしません。
まずは前準備として、パーティクルの発生する右手に設定とパーティクルの大元を作成します。
アバターのArmature下「Right_Hand」を選択し、右の詳細にて「AddComponent」をクリックし「Rigidbody」を追加します。
中の設定値で初期値から変更するところは
Angular Drag:0
UseGravity:チェック無
次にアバター上で右クリック⇒CreateEmptyでオブジェクトを作成
名前を「ShootSystem」とします。
作成した「ShootSystem」を選択し、「AddComponent」をクリックし「FixedJoint」を追加します。(FixedJointを追加するとRigidbodyも追加されます。)
Rigidbodyの設定はRight_Handと同じです。
FixedJointの設定はConnectedBodyのエリアに左エリアのRight_HandをD&Dして設定します、他は初期値のままです。
D&Dすると上記のイメージになります。
これで右手を動かすとパーティクルの発生位置も右手に合わせて動くようになりました。
ここから①のパーティクルを作成していきます。
作成した「ShootSystem」を右クリック⇒Effect⇒ParticleSystemでパーティクルを作成します、名前は「BulletSystem」とします。
最初作った状態では足元から白い球がたくさん浮き上がってきます。
「BulletSystem」の以下の設定値を変更します。(記載のない項目は初期値になります。)
~ParticleSystem~
Looping:チェック無
StartSpeed:1
SimulationSpace:World
~Emission~
Rate over Time:0
Bursts:+をクリックして行を追加
Count:1 (他の項目は初期値)
~Shape~
Shape:Box
Scale:0,0,0
上記の設定を行った後、シーン内の「Restart」をクリックすると白い球が1つだけゆっくりと移動するのが確認出来るようになります。
銃弾の発射位置などを確認するため一時的に右手に持っているリボルバーを表示状態にします。
ShootSystemの位置と向きを調整し、弾丸がちょうど銃口から出るように配置します。
いろいろな角度から「Restart」をクリックで射出してみて、リボルバーの向きの沿って弾丸が進んでいくことを確認してください。
弾丸の発生位置と射出方向が決まったら再度「BulletSystem」の設定を変更します。
~ParticleSystem~
Duration:0.1
StartLiftTime:0.1
StartSpeed:100
StartSize:0
~Renderer~
左のチェックを外す
※弾丸は早くて見えないのでそもそも描画せず見えなくしちゃいます。
次に②のマズルフラッシュパーティクルを作成します。
まず、AssetStoreから「Unity Particle」で検索して「Unity Particle Pack 5.x」をインポートします。(Freeです)
インポートが完了するとProject内にEffectExampleディレクトリが作成されます。
「EffectExamples > WeaponEffects > Prehabs」 下にある
「MuzzleFlashEffect」をシーン上にD&Dします。
「MuzzleFlashEffect」を選択した状態で「Restart」をクリックすると光が広がるエフェクトが確認できます。
「MuzzleFlashEffect」を「BulletSystem」にD&Dします。
「MuzzleFlashEffect」のSimulationSpaceを「World」に設定します。
「BulletSystem」と同様に「MuzzleFlashEffect」の位置と方向、大きさを調節して銃口から光が見えるよういろんな角度からRestartを駆使して設定します。
位置調整が出来たら「BulletSystem」の設定画面を再度開き、以下の設定を変更します。
~SubEmitters~
左のチェックを入れる
Birth
None(ParticleSystem)の所に「MuzzleFlashEffect」をD&D
この設定で、「BulletSystem」が発生時(Birth)に「MuzzleFlashEffect」が合わせて発生するようになります。
次に③着弾した部分が弾けるパーティクルを作成します。
「EffectExamples > WeaponEffects > Prehabs」 下にある
「BulletImpactMetalEffect」をシーン上にD&Dします。
「BulletImpactMetalEffect」を選択した状態で「Restart」をクリックすると弾けるエフェクトが確認できます。
「MuzzleFlashEffect」と同様に「BulletImpactMetalEffect」を「BulletSystem」にD&Dします。
「BulletImpactMetalEffect」と「BulletImpactMetalDust」の「SimulationSpace」を「World」に変更します。
「BulletImpactMetalEffect」下に配置された「Decal」を削除します。
「BulletImpactMetalEffect」を選択し、詳細内にある「DecalDestoroyer(Script)」を削除します。(右上の歯車からRemoveComponent)
「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つのパーティクルが発動するようになりました。
設定後、「BulletSystem」を選択して「Restart」をクリックすると着弾のパーティクルは見えなくなります。(ぶつかる物がないので)
アバター上で右クリック -> 3D Object -> Planeで足元に板を出します。
この状態で同様に「Restart」を実行すると、銃の向いている延長上で板とぶつかる箇所に着弾のパーティクルが発生していることが確認できます。
確認出来たら作成したPlaneは削除します。
これで弾丸射出、マズルフラッシュ、着弾すべてのパーティクルが作成完了となります。
最後にこれらのパーティクルを発生させるための設定を行います。
デフォルトでは発砲しないため、「BulletSystem」は無効状態にします。
次に「BulletSystem」を有効にするアニメーションと無効にするアニメーションを作成します、作成する手順はリボルバーを構えるための記事と同じ流れです。
今回は「Shoot_ON」と「Shoot_OFF」のアニメーションを作成します。
「AddProperty」からBulletSystemのIsActiveを追加してONとOFFでそれぞれアニメーションを作成します。
※チェックボックスの設定箇所は0:00と1:00で2か所なのに注意
リボルバーを構えるために利用したFXアニメーターを選択しAnimator画面を表示します。
新規で「Shoot」レイヤーを作成します。※歯車マークでWeightを1にするのを忘れないよう。
その後、作成したアニメーションを「Shoot_OFF」、「Shoot_ON」の順でD&Dします。
「Shoot_OFF」と「Shoot_ON」で右クリック->Make Transisionでそれぞれ矢印でくっつけます。
今回は発砲する条件を
・リボルバーを右手に持っている
・リボルバーを持っている手をグー(Fist)にしたとき
とします。
まず、「Shoot_OFF」から「Shoot_ON」へ向かう矢印の設定
Has Exit Time:チェックを外す
TransitionDuration:0
Conditions
Revolver Equals 1(リボルバーを右手に持っている)
GestureRight Equals 1 (右手がFist状態である)
次に、「Shoot_ON」から「Shoot_OFF」へ向かう矢印の設定
Has Exit Time:チェックを外す
TransitionDuration:0
Conditions
GestureRight NotEquals 1 (右手がFist以外の状態である)
これにて設定完了です、最後に一時的に出していた右手のリボルバーを非表示にします。
アップロード後、VRChat内でExpressionメニューからリボルバーを右手に持ち、右手をグーにすることで発砲することができます。
グー以外にして再度グーにすれば連射できるので人差し指でトリガーを引く感覚で連射ができるかと思います、お疲れさまでした!
マズルフラッシュと着弾については他にもフリーのパーティクルはたくさんあるので自分で気に入ったものを探してみてもいいですね。
この記事が気に入ったらサポートをしてみませんか?