cancel
Showing results for 
Search instead for 
Did you mean: 

Multiplayer Building Block for VR

rex.gatling.963
Protege

I have been asking this question for over a year. My client has a VR App that is a music platform where in one scene is where they host the show and the other room is a lounge like experience. I need for people to go back and forth between those rooms in the same instance using the Multiplayer building blocks. Each time I change a room they don't go to the instances for that room and their network avatar doesn't show up when they appear in that room when they change from room to room. It needs to be similar to VRChat. I am using the Photon Fusion Multiplayer building block. Here is the script I created I have been trying to use but it hasn't worked. Can somebody please give me a straight answer or at least some help?

 

using UnityEngine;
using UnityEngine.SceneManagement;
using Fusion;
using System.Collections;
 
public class ChangeScenes : MonoBehaviour
{
    public NetworkRunner networkRunner;
    public NetworkObject networkedAvatarPrefab;
    private static NetworkObject _persistentAvatar;
    private bool _sceneLoaded = false;
 
    private void Start()
    {
        if (networkRunner != null)
        {
            DontDestroyOnLoad(networkRunner.gameObject);
        }
    }
 
    public void SamplerArena() => ChangeScene("The New Sampler");
    public void ListeningRoom() => ChangeScene("ListeningRoom");
    public void Arcade() => ChangeScene("Arcade");
 
    private void ChangeScene(string sceneName)
    {
        if (networkRunner != null && networkRunner.IsRunning)
        {
            SceneManager.LoadScene(sceneName);
            StartCoroutine(WaitForSceneLoad());
        }
        else
        {
            SceneManager.LoadScene(sceneName);
        }
    }
 
    private IEnumerator WaitForSceneLoad()
    {
        while (!_sceneLoaded)
        {
            yield return null;
        }
        OnSceneLoaded();
    }
 
    private void OnSceneLoaded()
    {
        Debug.Log("Scene Loaded: " + SceneManager.GetActiveScene().name);
        _sceneLoaded = true;
 
        if (networkRunner.IsRunning && networkedAvatarPrefab != null)
        {
            if (_persistentAvatar == null)
            {
                _persistentAvatar = networkRunner.Spawn(networkedAvatarPrefab, Vector3.zero, Quaternion.identity, networkRunner.LocalPlayer);
                DontDestroyOnLoad(_persistentAvatar.gameObject);
            }
            else
            {
                _persistentAvatar.transform.position = Vector3.zero;
            }
        }
    }
 
    public void OnSceneLoadDone(NetworkRunner runner) { _sceneLoaded = true; }
    public void OnSceneLoadStart(NetworkRunner runner) { _sceneLoaded = false; }
}

 

0 REPLIES 0