5
1

More than 3 years have passed since last update.

VRChatで他のプレイヤーにダメージを与える銃を作る

Last updated at Posted at 2019-08-19

前回の続きです。
前回作った銃を使って、弾を当てた別のプレイヤーに、VRC_CombatSystemのダメージを与えられるシステムを作ります。PvPです。

(※VRC SDK 2019.2.5の仕様に従っており、遠回りな方法かもしれません。またこのSDKでしか使えない方法かもしれません。)

自身の当たり判定の作成

以下のようなHitという名前のCubeを作成します。Box ColliderはTriggerにしておきます。
分かりやすく色を付けていますが何色でもかまいません。
(VRCMirrorで見ない限り、相手からも自分からも見えないので)
11キャプチャ.PNG

次にこのCubeを選択したまま、AnimationタブからAnimatorを作成します。
(タブの右上からAdd Tabで出ます)
12キャプチャ.PNG

Add PropertyからTransform->PositionとScaleを追加して、以下のように設定します。
サンプル数1だけのアニメーションです。
13キャプチャ.PNG

このように作成するとHitにAnimatorが追加されており、このアニメーションがずっと実行されます。

このHitはPrefabにします。

VRC Combat Systemの設定

空のGameObjectにVRC_Combat Systemを追加します。
設定は以下の通りです。
Visual Damege Prefabという項目に先程作成したHitを設定しています。
14キャプチャ.PNG

本来こちらには、VRCSDKの中にあるVRC_PlayerVisualDamageのPrefabを設定します。
そうするとダメージを受けたときの張り付きエフェクトが表示されますが、今回このシステムを流用して自分に追従するオブジェクトを実現しています。

HitでAnimationを作成した理由ですが、Visual Damege Prefabに設定したものはScaleが変わってしまうので、Animationで上書きして固定しています。

ToyBoxのテクニックを参考にしました。
https://vrcworld.wiki.fc2.com/wiki/Toybox

レイヤー設定

以前作成した銃弾のSphereのPrefabで、以下の赤丸をクリックしてAddLayerします。
15キャプチャ.PNG

ProjectileとHitというLayerを追加しました。
16キャプチャ.PNG

銃弾のSphereにProjectileのレイヤーを設定します。
17キャプチャ.PNG

(今回Hitのレイヤーは使いませんが、ProjectileとHitだけ判定するようにした方が軽くなるはず)

ダメージ

HitのPrefabを選択し以下のようにVRC_TriggerでAdd Damageを設定します。
Projectileのレイヤーのオブジェクトに当たったら自分がダメージを受けるようになります。
18キャプチャ.PNG

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)

5
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1