局域网多人游戏场景更改
Posted
技术标签:
【中文标题】局域网多人游戏场景更改【英文标题】:Lan Multiplayer Scene Change 【发布时间】:2018-10-26 23:28:12 【问题描述】:我是 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");
上面的代码可以正常工作,但我不知道如何加载每个人,而不是只加载某些玩家到战斗场景中。
例如: 玩家在主持/寻找局域网游戏前输入名称
玩家 1 = 乔 玩家 2 = 鲍勃 玩家 3 = 比利 玩家 4 = 吉姆
在加载文本的预设标签/文本上显示“Joe,Billy”。现在,当任何玩家发现遭遇时,我只想将名为“Joe”和“Billy”的玩家加载到下一个场景,而其他玩家则不加载。
这可能吗?任何形式的帮助将不胜感激。
谢谢大家
【问题讨论】:
抛开问题:当战斗玩家进入战斗时,其他玩家在此期间在做什么? @LeonWillens 抱歉,我睡着了。回答你的问题,假设有 3 名玩家,其中两人将进入新的“战斗”场景,另一名玩家将留在当前场景。 只是查看NetworkManager 的API 参考,然后发现onlineScene
属性。参考声明“当网络会话启动时,该场景将切换到 - 例如客户端连接或服务器侦听。”这可能是您的解决方案。
您使用的是哪个网络系统?网吧?光子?好像你想做一个“嵌套网络管理器”,所以如果你使用Unet,也许你需要重新考虑一下大厅管理器,因为它不再是“dondestroyonload”了,然后在第二个场景,这导致了第三个场景。我清楚了吗?这有点令人困惑..
是的,如果您按照教程进行操作,那么您使用的是 Unet。这个想法(我真的不知道 Unity 是否允许这样做)是在另一个大厅中“伪造”一个大厅。所以你有你的主大厅,4 名玩家加入这个大厅,一起去第一个场景(场景 1)。在该场景 1 上,您再次执行相同的大厅逻辑,因此符合第二个大厅条件的玩家将更改为场景 2。
【参考方案1】:
我尝试了不同的想法,得到了 2 种不同的方法:
1-正如我在 cmets 上已经说过的,尝试嵌套 lobbyManagers
2-“伪造”场景分割在大厅
1.嵌套大厅
概念:
第一个场景,MainLobby,4名玩家进入,进入第二个场景
第二个场景,MainGame+SecondLobby,第一个场景有4个玩家,现在有两个人想去第三个场景,所以他们再次使用SecondLobby进行匹配。
第三个场景,第二个游戏。如果我们谈论性能,这是我认为最好的方法,但这是复杂的原因:
-实际 Unity NetworkLobby 使用的是单例模式,所以你需要重新编写单例部分。
-LobbyManager 是使用 DontDestroyOnLoad 构建的,因此您在下一个场景中为另一个大厅充电。
-我真的不知道你是否可以从第三场回到第二场:S
2.假场景
好吧,欢迎来到“肮脏的把戏”,第二个概念是:
第一个场景,MainLobby,4名玩家进入,进入第二个场景
第二个场景,MainGame,第一个场景有4个玩家,现在有2个玩家想去第三个场景。
第三个场景,第二个游戏。但是我们所做的不是再次“匹配”,而是将场景添加为附加场景,但在不同的坐标上,并在第三个场景中移动想要战斗的 2 名玩家。所以玩家会认为他们在不同的场景中,但他们并不是只是在移动。想到要记住:
-也许你真的不需要使用加法场景,只需在同一个场景、不同坐标上构建即可。 (https://docs.unity3d.com/ScriptReference/SceneManagement.LoadSceneMode.Additive.html)
-认为他们仍然是同一场景中的 4 个联网玩家,所以也许你想“禁用”一些 networkMessages,只影响某些“场景”上的某些玩家。 (https://docs.unity3d.com/ScriptReference/Networking.NetworkClient.Send.html)
但是,如果您实现了其他方法,请告诉我,它确实提供了有趣的游戏设计内容! :D
【讨论】:
如果没有其他方法,伪造场景可能对我有用。以上是关于局域网多人游戏场景更改的主要内容,如果未能解决你的问题,请参考以下文章