Unity多人游戏玩家数量不匹配。

3
我正在制作一个简单的游戏来练习技术。我有两个立方体就像两个玩家一样。我生成一个随机数,这是立方体的名称。我将这些数字存储在数组中,对此我没有问题。但当我让我的游戏变成多人游戏时,我遇到了一些问题,因为当我加入第二个玩家时,我认为游戏重新生成了第一个玩家的数字......你可以在图片上看到!这是生成和添加数字到名称的脚本,该脚本附加到玩家预制件。enter image description here
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;


public class PlayerThings : NetworkBehaviour {

    public int player_name;
    public GameObject Number;

    void Start () {

        player_name = Random.Range (10, 99);
        this.name = player_name.ToString ();
        GameManager.numbers [player_name] = 1;
        Number.GetComponent<TextMesh> ().text = name;

    }

    // Update is called once per frame
    void Update () {

    }
}

你需要一种在客户加入时传递客户详细信息的方法(例如编号、位置、颜色等)。 - BugFinder
你可以帮我决定应该使用哪种方法吗?或者你能给我一个示例吗? - antal1208
什么都没有,我只有这个和另一个包含一个数组(GameManager.number[])的脚本。 - antal1208
所以您并没有真正将两个客户端连接在一起。 - BugFinder
我只加入一个玩家一次,然后开始另一场游戏并加入另一个玩家。 - antal1208
显示剩余2条评论
2个回答

0

两个客户端将分别运行脚本,这意味着Random.Range代码将运行两次并获得一个独立的随机数,您需要想出一种方法来防止两个客户端生成随机值。

如果只是索引,我建议使用玩家数量+1或类似的数字,这将保持一致。

编辑:或者如@BugFinder在评论中所写,将您随机生成的数字发送到服务器,让服务器将玩家名称分发给客户端。


我有一个players[100]数组。当玩家连接时,在Start()中生成一个数字。例如生成了65,那么player[65] = 1;其他所有元素都等于0,你知道的...这个数字就是他的名字...有没有更简单的方法让其他玩家正确地看到他的名字?:( - antal1208

0

两个玩家各自运行游戏实例,因此可能会出现相同的名称。当他们加入一个房间/大厅时,您将不得不向每个玩家广播名称,或者让服务器处理它。

例如

  • 用户A加入房间
  • 服务器创建唯一的名称,比如100
  • 将100作为名称发送给用户'A'
  • 用户B加入房间
  • 服务器将数字增加1
  • 新名称是101
  • 将101作为名称发送给用户'B'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接