问题标签 [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 投票
1 回答
973 浏览

networking - Unity UNet MMO 风格的专用服务器方法

我们正在为我们的机构创建一个 MMO 风格的虚拟校园,我需要一些关于使用 UNet 的最佳实践和实施的建议。阅读后我得出结论,我可能应该使用一个具有单独场景的项目来构建服务器。所以我设置了它,它立即运行并启动了一个专用服务器。游戏场景随后会自动连接,但即使已将其添加到网络管理器中,玩家也不会被实例化。服务器场景只是一个带有 UNet 网络管理器组件的空白场景。

我对这种情况的看法是,为了更好的用户体验,游戏场景和所有用户交互都应该发生在客户端,然后更新服务器,然后服务器更新其他客户端。(随意拍下来)。

如果上述方法正确,那么如何将服务器场景设置为幽灵而不实际处理任何信息?

编写一个将某些变量发送到服务器而不是使用 UNet 网络组件的脚本是否有益,因为我认为它们会同步整个对象?

UNet 是否允许服务器仅充当更新客户端的中介而不是游戏的完整实例的那种功能?

我想我真正得到的是,使用 UNet 创建 MMO 风格、专用、无头、网络设置的最佳方法是什么?

0 投票
1 回答
378 浏览

unity3d - Unity2D:UNET 传输层 API 服务器脚本未正确发送消息

我正在关注 YouTube 上的统一多人游戏教程(UNET),但与视频中的人相比,我得到了不同的结果。你看我跟着他的教程去喝茶了,但是在我的服务器脚本中的更新函数中,我在 switch 语句默认函数中使用了 debug.log 来告诉我是否收到了无效的消息,我就是。我认为我的信息并没有真正被正确发送,尽管我仔细遵循了那个人的教程!我的服务器脚本中是否缺少某些内容?

这是我的代码:

}

下面的脚本是我的客户端脚本:

先感谢您!

0 投票
1 回答
586 浏览

c# - 为什么我的 OnStartLocalPlayer 和 OnStartClient 执行了四次?

在我的 UNET 播放器代码中,我有 OnStartLocalPlayer,它执行了四次。我添加了一个 gameobject.tag,所以我知道它是同一个玩家。我只使用一个客户端(主机客户端)执行此操作,但我仍然执行了四个 OnStarLocalPlayer。

0 投票
1 回答
1062 浏览

networking - Unity:本地(LAN)对接会错误

我正在尝试创建一个简单的多人游戏。我已经设置了一个配对系统,当设备连接到互联网时它工作正常,即成功创建了一个在线大厅。但是,当我尝试在无法访问 Internet 的本地网络上创建一个大厅时,什么也没有发生。

这是我用于托管游戏的代码:

现在,如果设备已连接到 Internet,则游戏已成功托管。但是,如果设备连接到没有互联网服务的 wifi,CreateRoom则调用该方法时不会发生任何事情。

CreateRoom()方法与onClick按钮的事件相关联。

我是统一网络的新手,希望有人能指出我做错了什么。谢谢。

0 投票
0 回答
1935 浏览

animation - Unity Networking:如何在子对象上同步动画?

我正在制作多人游戏,但我被困在同步动画上。我当前的播放器层次结构如下:

在此处输入图像描述

问题是 Marine 对象使用 IK 向上/向下瞄准,这意味着我使用 OnAnimatorIK 函数。为了使用 OnAnimatorIK,Animator 组件必须附加到与使用 OnAnimationIK 的脚本相同的游戏对象上。这意味着我必须将 Animator 附加到 Marine 游戏对象。如果我这样做一切正常(如果不尝试网络动画)。

现在,如果我将 Network Animator 附加到Player对象,动画将不会远程更新。当我尝试将 Network Animator 附加到Marine对象时, Network Identity组件也会自动添加并且无法删除。如果我尝试使用附加到 Marine 对象的网络身份组件进行构建,我会收到错误消息“您只能附加一个网络身份,并且它必须附加到根对象”。这意味着我应该将我的 Animator 组件以及 PlayerIKHandler 脚本移动到Player对象,以摆脱重复的 Network Identity 组件。

如果我确实将 Animator 组件移动到 Player 对象,它会破坏我的动画(模型处于 T 姿势),我什至在本地也看不到任何动画。

显然我做错了什么,我只是不知道为什么。如何在子对象上使用动画器同步动画,或者如果动画器组件附加到播放器(只是一个带有脚本的虚拟胶囊),我如何为模型制作动画。

0 投票
1 回答
2111 浏览

unity3d - 如何使用 Unity Unet 从服务器向客户端发送数据

我正在使用 UNet。我在现场有两个游戏玩家。其中之一是服务器,其中之一是客户端。我可以使用 [Command] 和 [ClientRPC] 获取客户端数据,但我无法将数据从服务器发送到客户端,我该如何解决这个问题?注意:服务器也是玩家。

这是我从客户端向服务器发送数据的代码:

“地子林”的意思是“序列”。“Sira”的意思是“命令”。

实际上在服务器和客户端都有自己的“订单”字符串。游戏开始时产生一个游戏对象。我希望服务器获取客户端“订单”脚本(我可以这样做)客户端获取服务器“订单”字符串(我不能这样做)。我该如何解决?

这是我生成的玩家对象脚本:

0 投票
1 回答
92 浏览

c# - Unity3D 中的媒人服务器:突然崩溃。

当第一个客户端连接到此错误时,Unity3D 中的媒人服务器总是在 2-6 分钟后崩溃:错误截图

错误可能在哪里?我错过了任何特殊的网络设置吗?

0 投票
1 回答
666 浏览

unity3d - 将 Unity 网络代码与游戏逻辑分开

我想将网络代码与我的游戏逻辑分开。我不仅需要这样做才能在单人和多人游戏模式之间共享游戏逻辑,而且因为关注点分离的事情,我也想要它。

我目前的方法是为我的网络相关类生成代码,以便有在线和离线版本。我使用 T4 模板执行此操作。

生成的类如下所示:

单机版/单机版:

多人版:

它们都共享一个接口来向调用者隐藏实现:

如您所见,两种实现都使用相同的主体,共享大部分代码,而入口点取决于实现是否联网。另请注意,这两个实现继承了不同的基类。

优点:

  • 单人代码对网络代码没有依赖性,反之亦然
  • 没有重复的代码(至少不需要手动维护)

缺点:

  • Unity 中对接口的支持是有限的。我将无法从编辑器中引用 IHelloWorld 的场景实例。
  • 必须为单人/多人游戏模式维护单独的 Prefab
  • 不得不干预 T4/代码生成

你知道更好的方法来解决这个问题吗?你是如何解决这个问题的?

0 投票
0 回答
474 浏览

c# - 判断新连接的播放器是客户端还是服务器播放器(主机),并删除服务器上的一条消息

我想确定新连接的播放器是否是客户端,并且在服务器播放器(主机)上删除消息。在 UNET 中,我希望 LAN 上有两个玩家。第一个玩家是服务器玩家,然后他们的对手连接。

玩家搜索要加入的 LAN 比赛,如下所示:

一旦找到匹配项,它就会收到这样的显示:

然后玩家可以通过单击刚刚实例化的按钮进行连接,如下所示:

现在一切正常,这些是麻烦的部分:

在服务器客户端上,它会在连接之前说“等待其他播放器”。当他们这样做时,我希望服务器播放器的味精消失,这就是我尝试这样做的方式,但它不起作用。

0 投票
1 回答
402 浏览

c# - 仅生成服务器端的对象 [NetworkServer/NetworkClient]

我正在尝试开始使用 Unity 的网络功能,但在尝试生成对象时遇到了问题。我尝试按照此处找到的文档创建一个简单的演示,服务器产生一个每秒改变颜色的对象,每个连接的客户端都应该看到这个对象及其颜色变化。客户端/服务器正在连接,但对象仅出现在服务器端(没有错误消息)。

客户端.cs

服务器.cs

BoxSpawner.cs

客户端和服务器都有一个名为 Box 的预制件,上面有以下脚本,以及一个 NetworkIdentity 组件。

盒子.cs

我还在这里将客户端/服务器项目上传到了 GitHub 存储库,如果有人可以看看并帮我一把,我将非常感激,谢谢。

注意:我试图在不使用 NetworkManager 的情况下完成此操作。