mimyquality / FukuroUdon

MimyLab's U# utilitiy pack for VPM.
MIT License
28 stars 4 forks source link

オブジェクトをEquipしたPlayerがLeftすると、他プレーヤがそのオブジェクトをEquipしてしまう。 #9

Closed anonaisu closed 7 months ago

anonaisu commented 7 months ago

PlayerAがObjectをEquipし、EquipしたままInstanceをLeftすると、Instanceに残っているPlayerBがObjectをEquipします。

使用したスクリプトは以下です。

public ManualObjectSync _object

public override void Interact()
{
    VRCPlayerApi lp = Networking.LocalPlayer;
    Networking.SetOwner(lp, _object.gameObject);
   _object.Equip(HumanBodyBones.Head);       
}
anonaisu commented 7 months ago

以下のスクリプト追記で回避可能でした。

public override void OnPlayerLeft(VRCPlayerApi player)
{
    if (_object.IsEquiped) { _object.Unequip(); }
}
mimyquality commented 7 months ago

ver 1.12.4 にて対応しました

anonaisu commented 7 months ago

1.12.4にUpdate後でも掲題と同じ現象が発生しました。 こちらの環境がわるいかもしれませんのでもう少し調べてみます。 早急のご対応ありがとうございます。

mimyquality commented 7 months ago

現行の仕様上、退室したのがOwnerか判定が難しかったため、オーナーが切り替わると強制的にEquipを解除するようにしました。

anonaisu commented 7 months ago

1.13.0にUpdate後、現象が解消されました。 ご対応ありがとうございました。