这可能是一个菜鸟问题,但对我来说很重要。我也认为这是一个有趣的话题。
我将 C# 与新的 Unity Multiplayer 一起使用。你可以在这里找到教程:https ://unity3d.com/learn/tutorials/topics/multiplayer-networking - 我正在研究这个基础。我刚刚成功地编写了我的代码,以便当玩家加入或主持时,他将他的“玩家统计信息”作为“PlayerStats”类的实例添加到静态列表中。它应该对每个玩家都以这种方式工作 - 每当有人加入时,他的统计数据实例就会添加到列表中。
现在,这个列表应该是一个,全局的,所以我想 - 它应该由服务器同步。也许是某种SyncVar
,可能SyncList
是某种类型。问题来了——有什么方法可以同步类实例列表吗?
我检查了 Unity 文档,这似乎很糟糕。或者也许我理解错了。SyncList 似乎只有整数等基本类型,还有一个结构,但是......我真的需要将带有玩家统计信息的类转换为结构以进行服务器范围的同步吗?
再一次我想要实现的目标:我需要有一个全球玩家列表,新加入的玩家将被添加和识别。我已经完成了识别——在添加新实例时,我给那个玩家一个ID = PlayerList.Count - 1
. ID 是静态的,但应该是本地的。如果 PlayerList 的元素可以是 PlayerStats 类实例,那可能是最好的。所以每个玩家(在他自己的索引处)将他的数据从磁盘加载到他在 PlayerList 中的实例中。我认为那样会很方便(虽然不知道该怎么做)。它在单人模式下工作,但在多人游戏中我不知道如何正确设计它。因为我需要该静态列表是服务器范围的,了解其他玩家。
如果我必须同步设备,这些设备是由我的项目中的类组成的。
你能帮我设计一下吗?我正在尝试基于我们新的 Unity Multiplayer 教程创建一个简单的多人 rpg。现在需要识别玩家并将他们的数据加载到适当的位置,这些数据已经由角色生成器生成并保存,并且已经在单人游戏中正确加载。我想我应该使用 PlayerStats 类的本地单例实例来获取玩家数据,并将这些实例保存在全局服务器范围的列表中。我的 PlayerStats 是 PlayerStatsObject 的一个组件(gameobject
在具有 的层次结构中为空DontDestroyOnLoad
)。PlayerStats 类,制成单例实例,包含整个生成的角色,以及他的生命体征、职业、种族、由职业组成的装备列表等。
所以基本上,我需要将每个玩家都添加到列表中,拥有自己的 PlayerStats,并使这些 PlayerStats 易于与其他玩家交互/修改(以及 AI 敌人/环境,但这很容易,它是单人游戏)。将 PlayerStats 作为一个组件添加到 Player prefab 对我来说似乎有点过头了,因为游戏中几乎所有东西都会一直调用这些统计数据。所以这是一吨GameObject.Find("Player").GetComponent<PlayerStats>();
。似乎那将是灾难性的设计。