VRC_CombatSystem

よくわかっていないが、何らかの変化がある。以下はその例。
Yes, you add the component "VRC_Combat System. That's it, now every avatar has colliders on the head, body legs, hands and feet. they are on the player and playerlocal layer

Visual Damage Prefab

アタッチしたPrefabのコピーが、ワールド開始時にプレイヤーのCameraの位置に生成される。

・このPrefabは位置・回転共にプレイヤーのカメラと完全に同期して動く。
・Prefabはそのプレイヤーのローカル上にしか存在せず、他のプレイヤーからは見えないし触ることもできない。
・Prefabはワールド移動しても消滅せず、そのワールド内でDestroyしなければ、VRChatを終了するまで付いてくる。

・生成時PrefabのScaleが非常に大きくなる現象がある。
 ワールドのMaster以外では、0.数秒ほどで元の大きさに戻るが、Masterにおいては、ほぼ大きいままになる。アバターを変更すると戻る。(要検証)

・PrefabにVRC_VisualDamageを追加するとPrefabが非表示になる。

CombatSystemに関する経験則

記載者:Satetu 2019/5/5

・CombatSystem を使用しているワールド開発者が少ないため殆ど個人的経験則になります。

・修正できないバグが今の所3つあります
・・当たり判定オブジェクトの Active を False にしても衝突するバグ
・・当たり判定をONOFFして何度も当てると、対象プレイヤーが永遠に死に続けるバグ
・・死んでる間にGenericアバターに変更すると、他人からは死んだ地点でTポーズを取り続けてるように見えてしまうバグ

・静止した Collider をアクティブにすることで AddDamage を起動すると同トリガーがOnOffされる度にダメージを受け続けるようになるバグがある。そのためON/OFFできるビームサーベルや、通電パネルのような仕掛けでも必ず Transform を動かしてダメージを与えなければならない

・プレイヤーが動かない限り、1つの Animation の中で1つの Collider からは1度しかダメージを受けません。Transform を激しく動かし何度衝突させても1回しかダメージを受けません
・Collider をOn/Off する事で複数回当てられますが、1秒間に1回程度当てるのが限度な上に、上記の致命的なバグが引き起こされます
・こうした結果から、どうやらVRC側でバグ防止のために、AddDamage には制限が課されていると推測されます、これを突破するとバグるので突破する意味はありません

・火炎放射器などで1秒間に複数回の範囲ダメージを与えたい場合は、Collider を複数個用意するのが最も確実で、Position を-1000あたりに設定した TriggerCollider を必要な回数(大抵はプレイヤーのHPを0以下にできる数で足ります)だけ用意して、それをHit間隔ごとに000Positionに移動させるとよいでしょう

・ヘルスは全てのクライアントからアクセスできて、しかもシンクロしているという仕様なので、Always でダメージを与えると人数分ダメージを受けます。例えば5人接続している状態で Always で 10ダメージを与えると、それぞれのクライアントで1度づつ10ダメージが発生し、それがシンクロして合計50ダメージが発生します、必ず Owner か Master 適切な方で与えましょう

・パーティクルを当ててダメージを与える方法は問題の解決の大きな助けとなります。ただコリジョンの精度に問題があるので、突き抜けない工夫が必要になるでしょう


CombatSystemとネットワーク

記載者:Satetu 2018/8/20

・ここから先は Unity のネットワーク仕様と照らし合わせて CombatSystem が何をしているかの推測を記載する
・ある程度 Unity のネットワーク仕様を理解している前提

・CombatSystem を起動すると相手の見た目通りに攻撃が命中する。これは今流行の「当たったら当たる」構造であるが、それを実現する為に VRC は Client 上に他の PlayerPrifab のコピーを生成し、そのコピーオブジェクトの Authority を与えていると推測される

・ABC の3人がいる場合
・・A の Client 上には A が Authority を持つ BC のコピーが制作される
・・B の Client 上には B が Authority を持つ AC のコピーが制作される
・・C の Client 上には C が Authority を持つ AB のコピーが制作される

・こうした設計上の理由から B への AddDamage を Always で発動すると以下のように動き、3回 AddDamage される
・・A が Authority を持つ B のコピーが Command を送信する
・・B 本体が Command を送信する
・・C が Authority を持つ B のコピーが Command を送信する

・時々他人が透明になるのは「自分の Client 上に居る相手のコピーが破損している」から。これは相手のバグではなく自分のバグである。

・上記の問題が自動的に修復されないことに大きな問題があって、他人の Client 上に存在する「自分のコピー」の当たり判定が破損すると、自分が何処に居ても永遠にダメージを受け続け、死に続けるという大惨事になる。

参考文献


カテゴリ・タグ: カテゴリ-Components

  • 最終更新:2019-05-05 15:46:45

このWIKIを編集するにはパスワード入力が必要です

認証パスワード