【发布时间】: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。
标签: c# unity3d unity3d-unet