ユーザーごとにスポーン位置を設定する
なお、本文書内のスクリプトは CC0 です。ご自由にお使いください! code:SpawnPosition.cs
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
namespace i544c
{
public class SpawnPosition : UdonSharpBehaviour
{
}
}
code:SpawnManager.cs
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
namespace i544c
{
public class SpawnManager : UdonSharpBehaviour
{
public override void OnPlayerJoined(VRCPlayerApi player)
{
for (int i = 0; i < positions.Length; i++)
{
SpawnPosition position = positionsi; if (position.username != player.displayName) continue;
player.TeleportTo(position.transform.position, position.transform.rotation);
}
}
// 一応リスポーンの場所もジョイン時と同じにする
public override void OnPlayerRespawn(VRCPlayerApi player)
{
this.OnPlayerJoined(player);
}
}
}
これだけ!シンプル!
使い方
SpawnPosition.cs
指定したいユーザー分だけGameObjectを作り、それぞれにこのスクリプトをアタッチする
ユーザー名を設定しておくと、そのユーザーはそのGameObjectの位置にスポーンするようになる
SpawnManager.cs
シーンに1つだけ置く
Positionsのところに、作成しておいたSpawnPositionのGameObjectを設定する
GameObjectを複数選択して、SpawnPositionsの丁度文字の所にドラッグアンドドロップすると一気に登録できる
ジョインして1~2秒は、他プレイヤーから通常のスポーン位置に居るように見えるかも
「Joining...」「Almost Done!」の時点で、通常のスポーン位置に居る
プレイヤー自身はちゃんとSpawnPositionで指定した場所から始まるように見える
リスポーン時は即座に指定した場所に飛ぶので、別に処理が重いわけではない
これはVRChat側の仕様でどうしようもない気がする
SpawnPositionで指定してないユーザーはどうなる?
普段どおりVRC Scene Descriptorで指定しているSpawsでスポーンする