【问题标题】:Respawn Player on Scene Change场景更改时重生玩家
【发布时间】:2018-03-11 23:19:32
【问题描述】:

我正在尝试通过网络切换场景,我希望每个玩家在本地异步加载场景,以便每个人都可以获得加载屏幕。我正在为命令和 RPC 调用而苦苦挣扎。场景改变后,我想重生一个新玩家并将其与客户端关联。

public void changeLevel(string name)
{
    CmdChangeLevel(name);
    //nm.ServerChangeScene(name); -> This doesnt change the scene Async
}

void changeScene(string name)
{
    SceneManager.LoadScene(name);

    //Stuff to re-Instantiate the player
}

[Command]
void CmdChangeLevel(string name)
{
    SceneManager.LoadScene(name);
    RpcChangeLevel(name);
}

[ClientRpc]
void RpcChangeLevel(string name)
{
    changeScene(name);
}

我尝试的一切都导致了场景切换,但没有实例化玩家,例如 (nm = networkManager) nm.OnServerAddPlayer() 并实例化它,然后通过服务器生成它。非常感谢您的帮助,在此先感谢

【问题讨论】:

    标签: c# unity3d unet


    【解决方案1】:

    也许您需要一个带有DontDestroyOnLoad (DDOL) 的静态游戏管理器? 基本上你要做的是:

    1) 创建一个场景并将其放在游戏构建顺序中的首位(因此游戏首先加载到其中)

    2) 使用 GameManager 脚本创建一个空的 GameObject。在 Start() 中放置 DontDestroyOnLoad 方法。

    3) 在您的脚本中,加载您的“第一个”场景(主菜单或闪屏等)

    这将使您放置 DDOL 脚本的对象即使在场景更改之间也保持不变,因此您可以处理该游戏对象中的加载屏幕和玩家生成等。

    【讨论】:

    • 基本上我想知道的是如何手动生成网络管理器的播放器预制件。我需要客户端在本地加载场景并要求服务器重生他的玩家,你知道吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 2021-10-17
    相关资源
    最近更新 更多