Lan多人场景变化

Noo*_*mer 10 c# unity-game-engine unityscript unity3d-unet unet

我是团结的新手,目前正在尝试制作局域网多人RPG游戏.

仅供参考,我遵循了官方统一局的多人游戏指南,一切顺利. https://unity3d.com/learn/tutorials/topics/multiplayer-networking/introduction-simple-multiplayer-example

到目前为止,我让玩家加载,他们能够移动.我在下面编写了以下代码(在虚拟更新例程下),这样当玩家移动时,它将每1秒随机化1到50之间的数字,如果数字是25,我们随机"遇到敌人".当任何玩家遇到一个敌人时我都会这样做,所以网络上的每个人都会进入"战斗场景".

if (Input.GetKey("up") || Input.GetKey("down") || Input.GetKey("left") || Input.GetKey("right"))
    {
        if (Time.time > NextActionTime)
        {
            NextActionTime = Time.time + Period;
            EnemyEncounter = Random.Range(1, 50);
            if (EnemyEncounter == 25)
            {

                NetworkManager.singleton.ServerChangeScene("Scene2");
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,但我不确定如何加载每个人,只加载某些玩家进入战斗场景.

例如:
玩家在主持/寻找局域网游戏之前输入一个名称


玩家1 = Joe
Player 2 = Bob
Player 3 = Billy
Player 4 = Jim

在预设的标签/文本上加载其中的文字"Joe,Billy".现在,当任何玩家发现遭遇时,我只想将玩家名称"Joe"和"Billy"加载到下一个场景,而其他玩家则不会.

这可能吗?任何形式的帮助将不胜感激.

谢谢大家

Lot*_*tan 3

我尝试了不同的想法,并得到了两种不同的方法:

1-正如我已经在评论中所说的那样,尝试嵌套大堂经理

2- “伪造”大厅中分裂的场景

1.嵌套大厅

概念:

  • 第一个场景,MainLobby,4人进入,进入第二个场景

  • 第二个场景,MainGame+SecondLobby,有4个玩家来自第一个场景,但是现在有2个玩家想去第三个场景,所以他们再次使用SecondLobby进行匹配。

  • 第三场景,第二场比赛。

如果我们谈论性能,我认为这是最好的方法,但这是一个复杂的原因:

-实际Unity NetworkLobby使用单例模式,因此您需要再次编码单例部分。

-LobbyManagers 是使用 DontDestroyOnLoad 构建的,因此您需要在下一个场景中对另一个大厅进行充电。

-我真的不知道你是否可以从第三个场景返回到第二个场景:S

2.假场景

好吧,欢迎来到“肮脏伎俩”,第二个概念是:

  • 第一个场景,MainLobby,4人进入,进入第二个场景

  • 第二个场景,MainGame,有 4 个玩家来自第一个场景,但现在其中有 2 个想要进入第三个场景。

  • 第三场景,第二场比赛。

但我们不是再次“匹配”,而是将场景添加为附加场景,但在不同的坐标上,并将想要战斗的 2 名玩家移动到第三个场景上。所以玩家会认为他们处于不同的场景,但事实并非如此,他们只是在移动。想到要牢记:

-也许您并不真正需要使用附加场景,只需在同一场景的不同坐标上构建即可。(https://docs.unity3d.com/ScriptReference/SceneManagement.LoadSceneMode.Additive.html

-认为他们仍然是同一场景中的 4 个联网玩家,所以也许您想“禁用”某些网络消息,以仅影响某些“场景”上的某些玩家。(https://docs.unity3d.com/ScriptReference/Networking.NetworkClient.Send.html

但如果您实现了其他方法,请告诉我,它确实提供了有趣的游戏设计内容!:D