问题标签 [unity3d-unet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
133 浏览

unity3d - Unity UNet 查询

我最近开始在 UNet 上工作,基本上是在一个 MMO 游戏上。我的设置是通过构建 linux 无头构建并在服务器上上传和运行它来托管我自己的专用服务器。所有客户端都连接到它,并且该服务器继续 24/7 运行。以下是我的问题:

  1. 据我了解,我不需要向 UNet 支付任何费用,因为我没有使用他们的配对服务,而是托管自己的服务器。这个对吗?

  2. 并发用户数没有限制。限制取决于专用服务器的强大程度。正确的?

  3. 在 NetworkManager 中,在高级配置下,我将最大连接数设置为 1000。这意味着它可以处理 1000 个并发用户?

  4. UNet API 用于客户端/服务器调用,不使用 Unity 服务器。正确的?

谢谢你。

0 投票
1 回答
658 浏览

c# - 在 Unity3d c# 中的所有客户端上都没有执行 ClientRpc 功能

目前我正在开发一款联网的 2d 平台游戏。我有一个脚本应该实例化玩家喷气背包,名为 JetpackManager。然而,当玩家被生成到场景中时,代码只会将喷气背包生成到主机场景中,而不是客户端场景中。这导致只有主机场景正常工作,而客户端场景中的所有玩家都没有喷气背包。这是我的 JetpackManager 代码:

}

所以本质上我的问题是RpcEquipJetpack函数中的代码出于某种原因只在主机上调用,而不是在任何客户端上调用。

0 投票
2 回答
2394 浏览

unity3d - UNet 随机断开连接

对于基本的网络场景(两个玩家转换和偶尔的 RPC),我一直在不断地丢失 UNet。由于超时,连接断开。

连接可靠地在 5 分钟内断开,并且大部分在 30 秒内断开。我在网上读到 UNet 经常这样做。我尝试将NetworkDropThresholdOverflowDropThreshold增加到 90%。我还将 ping 超时设置为 5 秒。

关于如何解决它的任何想法?我正在为两个玩家使用 wi-fi,并且我使用的是 Unity 5.6.0f3。

0 投票
1 回答
2817 浏览

unity3d - Unity3D Unet ServerDisconnected由于错误:超时

我正在使用 UNet 开发 MMO 游戏。我有一个在 AWS 上托管的 Linux Ubuntu 上运行的无头服务器。客户端连接到它,玩家可以互相玩。大约 15 到 20 分钟后,所有客户端都断开连接,服务器显示以下错误:

日志:connection {}已超时断开;地址 {::ffff:} 时间 {2666259}​​,上次记录时间 {2660314} rtt {299} 超时 {5000} ServerDisconnected 由于错误:超时

由于我是多人游戏的新手,我无法弄清楚是什么原因造成的。我在 AWS 上看到了资源,一切看起来都很好。

以下是我在 NetworkManager 中的超时设置:

最小更新超时:1 毫秒

连接超时:5000 毫秒

断开超时:5000 毫秒

Ping 超时:3000 毫秒

任何帮助将不胜感激。

0 投票
1 回答
1386 浏览

unity3d - 使用 NetworkTransform 和 NetworkAnimator 进行流畅的运动

我的玩家角色使用激活了根运动的 Animator 在世界各地移动。基本上,AI 系统在 Animator 上设置速度,进而控制控制角色运动的动画剪辑。由于这是一个标准功能,可以确保非常逼真的动画没有明显的滑动,我认为这是一个好主意......直到我添加了网络同步。

使用 NetworkTransform 和 NetworkAnimation 在网络上同步角色会导致这两个组件发生冲突:

  • NetworkTransform 将角色移动到主机命令的任何位置。
  • NetworkAnimator 同步动画变量并按照主机的指示播放动画剪辑,而这些动画剪辑也应用根运动。

结果是精确的(意味着角色到达了确切的目标目的地),但动作非常卡顿(明显的跳跃)。

移除 NetworkTransform,角色的主机和客户端实例会非常快速地去同步,这意味着当它们完全由依赖于时间的 Animator 控制时,它们最终将位于世界上的不同位置。

移除 NetworkAnimator,客户端实例将不会播放与主机相同的动画,如果有的话。

我尝试在禁用 Animator 的根动作的同时保留两个组件(仅在客户端上)。然而,在这种情况下,NetworkTransform 似乎根本没有插值。角色只是以大约 0.02 个单位的步长从同步位置跳到同步位置。与旋转相同。

NetworkTransform 配置为“同步变换”,因为角色既没有 RigidBody 也没有 CharacterController。所有其他值都是默认值:同步速率为 9(在那里也尝试了更高的值),移动阈值 0.001,捕捉阈值 5,插值移动 = 1。

如何在网络上获得流畅的根部运动?我希望这是一个标准的场景......

0 投票
1 回答
852 浏览

c# - 服务器端的 UNET SyncVar 未更新

我正在尝试使用 SyncVar,但我不完全理解我做错了什么,如果我做错了。情况如下:

  1. 我有两个公共 SyncVar:redFunds 和 blueFunds 以及两个本地“旧”版本进行比较

  2. 我使用 Cmd_UpdateXxx 在 Start 中启动 SyncVar,它有效

  3. 我有两个按钮,每个 SyncVar 一个

  4. 在更新中,我比较了 SyncVar 与 oldXxxFunds。如果命中我会在现场显示

当我运行代码时,它确实在两个播放器(红色和蓝色)的场景上显示了正确的数字,但是在查看“公共”SyncVar 时,这并没有完全反映在编辑器中。当按下红色按钮时,它在编辑器中只反映在红色播放器上,而不是蓝色播放器上。

有人可以向我解释我在这里做错了什么吗?...如果我做错了什么。我不应该也看到编辑器中的更改吗?

0 投票
0 回答
2207 浏览

unity3d - UNET:使用 ip 和端口将客户端连接到主机

我正在尝试使用 UNET 创建我的第一个多人游戏,其中一个玩家总是托管。我计划进行主机迁移,即使主机离开也能继续游戏。一般来说,这甚至是一个好主意吗?

到目前为止,我有一个创建新房间的功能(玩家开始托管一个房间),如下所示:

这是经过测试和工作的(主机的游戏开始并且数据库接收数据)。我已经在 Android 和 PC 上测试了托管。两台设备都向数据库发送不同的 IP ( xxx.xxx.xx.xxx ) 但相同的端口0。端口0可以正确吗?

接下来发生的事情是另一个玩家试图以客户身份加入游戏。为此,我有以下代码:

如果两个设备都在同一个 Wi-Fi 中,则可以加入游戏。如果 PC(主机)使用 Wi-Fi 并且 Android 尝试加入房间(使用移动网络),我总是在大约 15 秒后出现超时错误。

为什么这只能在同一个 Wi-Fi 上工作,而不是在不同的互联网连接上工作?

0 投票
2 回答
919 浏览

unity3d - Unity 3d中如何分别识别服务器和客户端

我正在尝试了解 Unity 网络开发中的数据同步。我面临的第一个问题是了解 unity3D 服务器客户端模型。

1

  • 我的基本理解是一台机器表现为服务器+客户端,而另一台只是客户端。
  • 但是在从 PC 构建托管的以下图形中,根本没有服务器????
  • 当我现在从 Unity Editor 托管它时,服务器 + 客户端都有.. 为什么???

2

  • 我试图解决的另一个问题是做出这样的行为,如果我在服务器上按下空格按钮,它会增加服务器分数。

  • 当在客户端按下空间时,客户端也会如此,它会增加客户端分数。

  • 根本没有进展,因为我无法弄清楚如何将服务器日期与客户端数据分开。尝试获取两个不同 Text 对象的引用,如果它是服务器,它将从层次结构中获取服务器文本,如果它是客户端,则使其从层次结构中获取客户端文本对象。

我希望图形是不言自明的。

以下图形由我面临的 2 个不同问题组成。

0 投票
1 回答
1002 浏览

c# - 为什么 NetworkServer.Spawn() 需要 [Command],而 NetworkServer.Destroy() 不需要?

我有这个来自我正在制作的多人射击游戏的脚本,我对 [Command] 属性的使用有疑问

这是代码:

现在,如果我从 CmdShoot 中删除 [Command] 属性,则远程玩家无法射击,因为他没有 NetworkServer(据我了解)

我认为 CmdHit 也是一样的,远程玩家无法摧毁子弹或硬币,因为他没有网络服务器。

但是.. CmdHit 即使没有 [Command] 属性也能正常工作,我想知道为什么?

0 投票
0 回答
1675 浏览

unity3d - 带 UNET 的专用服务器

我正在尝试制作一个多人游戏,其中最多 4 名玩家可以加入一个房间并射击一些敌人,默认统一网络中的一个玩家将是主机 + 客户端,但我想制作一个专用服务器并做最多在服务器上进行计算以防止作弊。

我将使用 UNET 编写一个“房间主”,将其构建为独立的,当客户端请求从服务器加入时,服务器将运行带有 -batchmode -nographics 的“房间主”实例,玩家将加入游戏和房间主将在游戏中进行所有计算。

关于这个主题有几个问题和答案,但如果这是一个好方法,我似乎没有找到答案。

我的问题是:

1)这是一个好方法吗?

2)像这样运行100个实例在服务器端会很重吗?

3) 据我所知,我们不能在 Photon 的专用服务器上运行我们自己的游戏逻辑,对吗?

4) 在 Unity 多人游戏服务中,我的“房间管理员”是否会被视为 CCU?

任何建议都会很棒,在此先感谢。