2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VRChatのUdonでテレポートをした際に視点だけ移動する場合、Delayすると解決するかもしれない

Last updated at Posted at 2024-09-07

概要

チーム開発していた際にテレポートを使用したギミックを組んだ際に、なぜか視点だけ移動してアバターが移動しない事が発生しました。

環境

  • 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をはさんだことにより、おそらく内部的な処理が終了した段階で安全にテレポートできるようになったと思われます。
この解決策で二人程救いました。
もし詳しい原因がわかる方はコメントなどで教えていただけますと幸いです。

2
3
2

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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?