c# - 局域网多人场景切换

标签 c# unity3d unity3d-unet

我是 Unity 的新手,目前正在尝试制作 LAN 多人 RPG 游戏。

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

到目前为止,我已经让玩家载入并且他们能够移动。我在下面编写了以下代码(在 void 更新例程下),这样当玩家移动时,它会每 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");
            }
        }
    }

上面的代码工作正常,但我不确定如何只将某些玩家加载到战斗场景中,而不是加载所有人。

例如:
玩家在Hosting/Finding LAN game前输入名字


玩家 1 = 乔
玩家 2 = Bob
玩家 3 = 比利
玩家 4 = 吉姆

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

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

谢谢大家

最佳答案

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

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

2-在大厅“伪造”场景分割

1.嵌套大厅

概念:

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

  • 第二个场景,MainGame+SecondLobby,有4个玩家是从第一个场景过来的,现在有2个想去第三个场景,所以他们又用SecondLobby来匹配。

  • 第三个场景,SecondGame。

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

-Unity NetworkLobby实际使用的是单例模式,所以单例部分需要重新编码。

-LobbyManager 是使用 DontDestroyOnLoad 构建的,因此您在下一个场景中向另一个大厅收费。

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

2.假场景

好吧,欢迎来到“肮脏的把戏”,第二个概念是:

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

  • 第二个场景,MainGame,有 4 个玩家来自第一个场景,但现在有 2 个玩家想去第三个场景。

  • 第三个场景,SecondGame。

但不是再次“匹配”,我们所做的是将场景添加为附加场景,但在不同的坐标上,并将想要战斗的 2 个玩家移动到第三个场景。所以玩家会认为他们在不同的场景中,但实际上他们只是在移动。想到要记在心里:

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

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

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

关于c# - 局域网多人场景切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50378840/

相关文章:

c# - 如何使用属性标记 C# 类以使其可序列化为 XML?

c# - 使用 AsSequential 以保持顺序

unity3d - Google.JarResolver.ResolutionException : Cannot resolve com. google.firebase :firebase-analytics-unity:1. 0.0()

c# - Unity3d:从 C# 对象执行任意 javascript

c# - Unity3d unet - 来自客户端的 TargetRPC 调用

c# - 使用 Unet 在特定位置生成玩家

c# - MVC 如何防止通过名称调用 Action Method 而只允许通过路由调用它

c# - 更多 C# 自动化到 Excel

c# - 多个嵌套的 JSON 信息 - C# 过程

unity-game-engine - 使用 NetworkTransform 和 NetworkAnimator 进行流畅的运动