【问题标题】:Unity multiplayer players number not matchUnity多人游戏玩家数量不匹配
【发布时间】:2018-04-22 14:28:52
【问题描述】:

我制作了一个简单的练习游戏。我有 2 个立方体,比如 2 个玩家。我生成一个随机数,这是立方体的名称。我将这些数字存储在一个数组中,我对此没有任何问题。但是当我制作多人游戏时,我遇到了一些问题,因为当我加入第二个玩家时,我认为游戏会重新生成第一个玩家的号码......你可以在图片上看到! 这是生成并将数字添加到名称的脚本。这个脚本附加到播放器预制件上。

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 () {

    }
}

【问题讨论】:

  • 您需要一种在客户加入时将客户详细信息(例如号码、职位、颜色等)交给客户的方法
  • 你能帮我用什么方法吗?或者你可以给我一个例子?
  • 你必须用什么代码通知一个客户另一个客户加入它?
  • 没什么,我只有这个和一个包含数组的脚本(GameManager.number[])。
  • 所以你并没有真正将 2 个客户连接在一起

标签: c# unity3d networking multiplayer


【解决方案1】:

两个客户端将单独运行脚本,这意味着 Random.Range 代码将运行两次并获得一个单独的随机数,您需要想办法阻止两个客户端生成随机值。

如果它只是一个索引,我建议使用玩家人数+1 或类似的,这将是一致的。

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

【讨论】:

  • 我有一个 player[100] 数组。当播放器连接时,在 Start() 中生成一个数字。就像生成了 65 然后 player[65] = 1;其他所有内容 = 0 你知道.... 而这个数字是他的名字.... 没有最简单的方法让其他玩家正确地看到他的名字?? :(
【解决方案2】:

两个玩家都运行自己的游戏实例。因此,您可能会使用相同的名称。当您加入房间/大厅时,您必须向每个玩家广播名称。或者让服务器处理它。

例如

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2019-03-16
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多