前回の続きです。
前回作った銃を使って、弾を当てた別のプレイヤーに、VRC_CombatSystemのダメージを与えられるシステムを作ります。PvPです。
(※VRC SDK 2019.2.5の仕様に従っており、遠回りな方法かもしれません。またこのSDKでしか使えない方法かもしれません。)
##自身の当たり判定の作成
以下のようなHitという名前のCubeを作成します。Box ColliderはTriggerにしておきます。
分かりやすく色を付けていますが何色でもかまいません。
(VRCMirrorで見ない限り、相手からも自分からも見えないので)
次にこのCubeを選択したまま、AnimationタブからAnimatorを作成します。
(タブの右上からAdd Tabで出ます)
Add PropertyからTransform->PositionとScaleを追加して、以下のように設定します。
サンプル数1だけのアニメーションです。
このように作成するとHitにAnimatorが追加されており、このアニメーションがずっと実行されます。
このHitはPrefabにします。
##VRC Combat Systemの設定
空のGameObjectにVRC_Combat Systemを追加します。
設定は以下の通りです。
Visual Damege Prefabという項目に先程作成したHitを設定しています。
本来こちらには、VRCSDKの中にあるVRC_PlayerVisualDamageのPrefabを設定します。
そうするとダメージを受けたときの張り付きエフェクトが表示されますが、今回このシステムを流用して自分に追従するオブジェクトを実現しています。
HitでAnimationを作成した理由ですが、Visual Damege Prefabに設定したものはScaleが変わってしまうので、Animationで上書きして固定しています。
ToyBoxのテクニックを参考にしました。
https://vrcworld.wiki.fc2.com/wiki/Toybox
##レイヤー設定
以前作成した銃弾のSphereのPrefabで、以下の赤丸をクリックしてAddLayerします。
ProjectileとHitというLayerを追加しました。
銃弾のSphereにProjectileのレイヤーを設定します。
(今回Hitのレイヤーは使いませんが、ProjectileとHitだけ判定するようにした方が軽くなるはず)
#ダメージ
HitのPrefabを選択し以下のようにVRC_TriggerでAdd Damageを設定します。
Projectileのレイヤーのオブジェクトに当たったら自分がダメージを受けるようになります。
Broadcast TypesをLocalに設定することで、自分にのみ影響するようにします。
(現在の仕様では、Local以外では他のプレイヤーにもダメージが入ってしまうと思われます)
Broadcast Typesについてはこちら
https://docs.vrchat.com/docs/trigger-broadcast-types
ローカルテストではうまく動作しないため、実際にPublishして確認してみてください。
私はPCとOculus Questでアカウントを2つ作って確認していました。
あとHitの方はローカルでしか作用しないため、被弾エフェクト等は銃弾の方のトリガーで出すようにした方がいいと思います。
#環境
Unity 2017 4.2.8f1
VRC SDK 2019.2.5 (31 July 2019)