Articles of 多人

通过Socket服务器的基本连接

我正在devise一个简单的2播放RTS与Stencyl,一个程序使用块编码。 当演员移动时(新的X和Y),当前的代码更新列表,我希望服务器更新列表中的每个更改的游戏状态。 但是,要开始:我甚至不知道如何设置套接字服务器。 Stencyl教会了我逻辑的基础知识,但是我还没有学习任何编程语言。 我已经下载了一个我打算使用的Smartfox 2X套接字服务器。 现在我只是想要做一些小小的步骤; 我想做一些这样的事情:“当有人连接到服务器, 在这里打开插入文件 ”。 我怎样才能做到这一点? 我的意图是让这个文件成为游戏客户端。 这是“打开文件连接时”的方法去这个最好的方法? 当回答时:假设我什么都不知道,因为真的,虽然我已经做了研究(我知道UDP> TCP实时),但实施方面我什么都不知道。

我应该使用线程来检查多人游戏的套接字吗?

在多人游戏中,获取/发送信息从/到套接字的代码驻留在游戏循环中还是属于它自己的线程?

谷歌游戏服务是否需要用户拥有g +帐号才能进入大堂?

我一直在阅读有关多人游戏大厅/房间的 Google游戏服务(GGS) API,如果用户需要使用Google+帐户(我不需要)login,文档并不十分清楚。 networkingGGS SDK提到这一点: 将loginbutton添加到页面的最简单方法是实现基于HTML的loginbutton。 有关实施详情,请参阅Google+login文档中的在您的页面上添加HTMLloginbutton。 我正在寻找的是一个简单的方法(服务或图书馆)将匿名用户连接在一起(配对)。 我的应用程序在Java中,也需要Java兼容的API。 Google游戏服务能否满足账单要求,还是应该继续寻找?

与游戏勾号同步

我正在开发一款多人游戏,目前正在设置。 它接受来自客户端的数据包,并执行所需的任何处理。 还有一个主要的游戏勾号是这样设置的: for every online player update every player in the region for every online player reset flags 我看到可能发生的问题是,因为它在运行中处理数据包,它可能会修改更新和标志重置之间的某些内容,这可能导致它完全忽略某些内容。 我不认为有可能使用实际的同步块进行同步,因为它不能同时更新和重置标志 – 它需要在更新每个玩家之后重置标志。 我看到的唯一的解决scheme是不在飞行中处理数据包,并在主循环中执行,但这可能会损害性能。 这是最好的解决scheme,还是有另一种select,我不考虑? 谢谢

UDK ping检查不join游戏?

我在为UDK创建定制的服务器浏览器方面取得了很大的进展。 它向主服务器注册服务器,客户端可以下载列表并填充服务器浏览器。 不过,我想告诉用户在服务器浏览器中的服务器的ping。 我知道PlayerReplicationInfo有一个服务器检查本机function,但只有当播放器实际连接到服务器时才起作用。 我想ping一下服务器而不join它,然后收集数据显示给玩家? 这很容易实现吗? 难以实施? 也许这是浪费时间,因为需要ping所有可能的服务器所需的时间? 如果很容易实现,我该怎么做呢? 我是否需要制作一个自定义的TCPLink类来计算消息来回传递的时间?

如何摧毁UNET的其他玩家的孩子对象?

现在,我有一个多人游戏,玩家在其他玩家发射有一定泡沫的射弹。 一旦玩家失去了所有的泡沫,他们就会失败。 我以前的问题是,在一个屏幕上,第一个玩家可以射出第二个玩家的泡泡,但并不是所有的第二个玩家的屏幕上的气泡都会popup,所以我试图通过networking同步它。 我看到的问题是,NetworkServer.Destroy需要find你想要通过其NetworkIdentity销毁的GameObject,但只有根目录PlayerGameObject被允许具有NetworkIdentity组件。 什么是我可以同步毁坏玩家的子对象的最佳方式?

需要帮助,遵循Unity多人健康棒教程。 只在游戏的服务器主机实例上工作

真的希望有人可以看看我的代码,我一直在试图修复它几天。 我遵循的Unity教程是相当基本的,但让我困惑的是(和潜在的问题出在哪里)是: if (!server){return;} 部分在我的TakeDamage()函数的顶部。 我看到的问题是,一旦我到达教程的那一部分,宿主发射的子弹就会注册到另一个玩家身上,而且我可以看到他的健康状况已经下降(至今为止!),但是当我加载实例在编辑器(我在我的笔记本电脑上运行了另一个独立的程序,并连接到互联网匹配,但同样的事情发生),他的子弹没有注册(即使我的debugging日志告诉我雷射击玩家。 本教程告诉我,如果不是服务器,它会返回它,然后使用[SyncVar]和一个钩子,每当currentHealth被改变时应该调用方法“OnChangeHealth”。 这看起来没有发生,而TakeDamage代码只发生在服务器 – 客户端 – 主机实例上。 我试图将教程改编为我自己的游戏,因此函数和类名称之间存在一些细微差别,但对我来说,它看起来function完全相同。 我将不得不在这里发布我的完整代码,因为我不知道哪个部分导致了问题: (非常感谢您阅读和/或帮助): Player类: public class Player : NetworkBehaviour { private GameObject startScreen; public const int maxHealth = 100; [SyncVar(hook = "OnChangeHealth")] public int currentHealth = maxHealth; private float playerHeight; private AudioSource audioSource; public AudioClip painBodySound; public AudioClip painHeadSound; public AudioClip painHeadSound2; public […]

客户端/服务器推断

比方说,我们有一个简单的多人游戏,玩家可以射击和阻止移动缓慢的子弹。 子弹是一个简单的线性射弹,其位置可以很容易地外推。 这里是一个例子,解释我目前的stream程: (1)玩家发射,客户端通知服务器。 (2)服务器执行必要的检查(弹药等),创建子弹,然后通知所有客户的位置和方向 (3)客户开始显示子弹(只有在服务器通知其创建,即使是客户端子弹的玩家) (4)客户根据方向开始子弹的位置推测,服务器在旅行中不会将子弹的位置更新给客户 (5)如果玩家阻塞,则客户端通知服务器 (6)服务器执行必要的检查,然后通知所有客户端该玩家已经使用了阻止 (7)碰撞时,服务器通知碰撞事件及其结果(碰撞或被阻挡/受损的数量等) 现在的问题是:如果在服务器确认结果之前,射击者的客户端检测到冲突,我该如何处理外推? 我可以看到的选项是: (一)假设碰撞确实发生了,敌方玩家没有阻挡(玩命中animation,更新敌方HP等)。 这显然是有问题的,因为敌方玩家可能在最后一秒被阻挡,并且在客户意识到敌方玩家的区块之前可能已经在射手客户端上发生碰撞。 (B)等待外推直到服务器发送碰撞结果。 问题在于,视觉效果可能在高等待时间看起来很尴尬,而子弹在视觉上与敌方玩家发生碰撞,并且在服务器将结果通知给客户端之前什么也没有发生。 (C)实施(B)并且以相当于等待时间的量推断“滞后”。 这个方法有两个问题:(1)如果有一个滞后峰值,我们又回到了与(B)相同的问题。 (2)现在可能会出现相反的问题:服务器可以在客户端进行检测之前检测到碰撞,在这种情况下,客户端必须在子弹直观地碰撞或阻止来自玩家的信息直到碰撞发生之前笨拙地显示结果在客户端,这使得连接速度较慢的玩家处于更高的劣势。 我是新来的多人游戏开发,这似乎是多人游戏中的一个基本问题,但我似乎无法find如何处理它的好信息。 任何意见,将不胜感激。

如何使用networking管理器更改播放器实例上的variables?

所以我试图通过点击一个使用Unet的button来更改播放器对象的variables。 但是,我无法获得播放器对象的实例。 有没有办法从networking管理器组件获取播放器的实例? 我可以在玩家连接之前更改variables,但是一旦连接,我就不能再修改它了。 有没有办法做到这一点? 我有一个PlayerController脚本,我基本上想要做的是基于button按下更改我的播放器对象上的整数。 我已经尝试用gameObject和this来引用附加到脚本的gameObject 。 这似乎并没有工作,我也试过player.GetComponent<PlayerController>().myInt ,似乎并没有改变它。 所有这些方法的工作,直到我作为主机或客户端连接,然后只是连接后,什么也不做。

有没有办法在Windows / Ubuntu计算机的组合上做本地多人游戏?

到目前为止,我已经尝试过蓝牙,但它似乎无法在Windows或Ubuntu上运行(对于这种使用情况,它可以很好地连接到打印机)。 我也查了一下USB桥接电缆,但是从我迄今为止所读的内容来看,它们也不能用于此。 由于游戏是一个业余爱好项目,因此解决scheme既不昂贵也不需要数月的工作。 这是一个回合制的游戏。 否则,我不会问,但findUnity和虚幻引擎之后,find一个不同的项目可以做到这一点; 目前,我也没有使用。 有没有办法在Windows / Ubuntu计算机的组合上做本地多人游戏?