概要
チーム開発していた際にテレポートを使用したギミックを組んだ際に、なぜか視点だけ移動してアバターが移動しない事が発生しました。
環境
- Unity 2022.3.22.f1
- VRChat SDK 3.6.1
コード背景
ドアをUseした際にテレポートをさせますが、その際同時に何らかのObjectをPlayerに追従させています。このObjectにはコライダーは存在しませんが、テレポート時に現在位置からテレポート位置までの間に存在する部屋や地面などのコライダーに引っかり視点のみが移動します。(アバターも移動するが、コライダーに阻まれる)
解決策
以下がもしかしたらテレポートできない場合のコード。
動かない.cs
// かなり略
// テレポート発火関数(独自)
public void OnTriggerTeleportButton(){
Networking.LocalPlayer.TeleportTo(targetPosition.position, targetPosition.rotation);
}
以下がもしかしたらテレポートが解決する場合のコード。
動く.cs
// かなり略
// テレポート発火関数(独自)
public void OnTriggerTeleportButton(){
SendCustomEventDelayedFrames(nameof(TeleportTo), 10);
}
// 独自関数
public void TeleportTo()
{
Networking.LocalPlayer.TeleportTo(targetPosition.position, targetPosition.rotation);
}
原因
Delayをはさんだことにより、おそらく内部的な処理が終了した段階で安全にテレポートできるようになったと思われます。
この解決策で二人程救いました。
もし詳しい原因がわかる方はコメントなどで教えていただけますと幸いです。