Lan多人场景变化

时间:2018-05-16 19:46:44

标签: c# unity3d unityscript unity3d-unet unet

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

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

到目前为止,我让玩家加载并且他们能够移动。我在下面编写了以下代码(在虚拟更新例程下),这样当玩家移动时,它会随机化一个介于1和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”加载到下一个场景,而其他玩家则不会。

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

全部谢谢

1 个答案:

答案 0 :(得分:3)

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

1-正如我已经在评论中告诉的那样,请尝试嵌套大厅经理

2- 在大厅“伪造”场景

1。嵌套大厅

概念:

  • 第一个场景,MainLobby,四个玩家进入并进入第二个场景

  • 第二场景,MainGame + SecondLobby,第一个场景有4个玩家,但是现在其中有2个想进入第三个场景,所以他们再次使用SecondLobby进行比赛。

    < / li>
  • SecondGame中的第三场景。

如果我们谈论性能,这是我认为最好的方法,但这是精心设计的原因:

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

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

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

2。假场景

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

  • 第一个场景,MainLobby,四个玩家进入并进入第二个场景

  • 第二场景,MainGame,第一个场景有4个玩家,但是现在有2个玩家想进入第三个场景。

  • SecondGame中的第三场景。

但是,我们要做的不是代替“ matchmake”,而是将场景添加为加性场景,但是在不同的坐标上,并移动要在ThirdScene上战斗的2个玩家。因此,玩家会认为他们处在不同的场景中,但是他们并不是仅仅在移动。想着要记住:

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

-认为他们仍然是同一场景中的4个联网播放器,因此也许您想“禁用”某些networkMessages,以仅影响某些“场景”中的某些播放器。 (https://docs.unity3d.com/ScriptReference/Networking.NetworkClient.Send.html

但是,如果您采用其他方法,请告诉我,它确实可以提供有趣的游戏设计知识! :D