问题标签 [unity-networking]

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 回答
145 浏览

unity3d - 如何在网络游戏 Unity3D 中只创建一个 Player 对象?

我尝试在 Unity3D 中创建网络游戏。默认情况下,当游戏开始时,网络管理器会实例化Player每个Gamer. 但我想要谁是主机玩家,它将是创建玩家对象。其他人必须问自己“我是主人吗?” 答案是“不”,然后再问自己“PlayerObject 的名称在哪里?” 在这里回答'它是'。那么我怎样才能只实例化一个Player对象呢?

0 投票
2 回答
583 浏览

unity3d - 改变光照强度 Unity 多人游戏

我目前在尝试更改多人游戏中灯光的强度时遇到问题。

开始游戏的人,主机的光强度变化很好。然而连接到主机的人,他们的光强度并没有改变。

我正在尝试使用 [SyncVar] 更改光强度,但是连接到主机的播放器根本看不到光强度变化。这是我的代码:

我的问题是,光强度只对一个玩家,即主机发生变化。我希望所有连接到游戏的玩家的光强度都发生变化。欢迎任何建议。

0 投票
0 回答
65 浏览

c# - Unity Multiplayer 客户端输入无效

我尝试做足球比赛是为了好玩,但我遇到了问题

主持人可以拖动或射击,但客户端不能对球做任何事情。但如果我喜欢那样

客户可以用力击球

我也这样做

仍然可以打印在客户端上输入但拖动不是主机可以打印它们

我能做些什么来解决这个问题?

0 投票
1 回答
717 浏览

c# - Unity 网络生成延迟

我已经像教程中那样实现了网络游戏,客户端将 Cmd 火发送到服务器,然后服务器将向所有玩家生成子弹。

当我在局域网上玩它时一切都很顺利(ping < 20ms)。但是当我尝试使用 Match Maker 在 Internet 端运行时,ping 大于 80 毫秒,并且子弹在客户端上延迟。

游戏是可以射击的船,所以当船从左向右移动时,我开枪,子弹延迟了。当我检查其他游戏(非统一)时,子弹似乎在本地运行。但它不适用于 Unity,因为网络对象必须在服务器上生成。延迟拍摄仅适用于我的玩家。有什么办法可以解决延迟问题吗?谢谢你的帮助。

0 投票
1 回答
52 浏览

c# - 网络运动不起作用

我正在为我的躲避球游戏制作多人游戏场景,一旦我有一个主机和一个客户端运行,它就会让人兴奋并迫使我在一个窗口中控制主机和客户端。这就是我的意思:在此处输入图像描述

这是我管理网络的代码:

这可能与我对 LocalAuthority 缺乏了解有关。

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 回答
3642 浏览

c# - 如何在使用 NetworkManager Unity 时触发 OnPlayerConnected?

我正在使用 UNet 和 NetworkManager 组件。当玩家连接到服务器时,我正在尝试对我说“我已连接”。我必须把它序列化。我正在使用 NetworkBehaviour,我认为这可能会导致失败。但是我怎样才能序列化呢?

这是我的代码:

0 投票
1 回答
500 浏览

c# - Unity NetworkServer / NetworkClient 传输 GameObject

我正在研究 NetworkServer/NetworkClient 之间的统一网络。我不使用网络管理器

这是我的客户代码的一部分。

这是我的服务器代码的一部分。

我有两个问题。

  1. NetworkServer.SendToAll(msgType, msg)即使没有控制台错误,我使用而不是NetworkServer.Spawn(obj)根本不起作用的原因。可能的原因是什么?
  2. 上面的代码也有问题。NetworkServer.SendToAll(mspType, msg)每当导致colsole 错误消息

ArgumentException:您要实例化的对象为空。

我不明白为什么 newPrefab.p 为空......对于网络编程新手有什么想法吗?

0 投票
0 回答
183 浏览

c# - Unity 5.5.0f3 - 使用 ClientRpc 更新对象会引发“发现 Rpc 调用没有行为...”

我正在开发团队比赛游戏。每支队伍都有自己的重生点,目标是摧毁另一支队伍的重生点。spawn 以 3 个对象的形式在网络中设置 - 一个实际 spawn(稍后称为物理 spawn),仅对服务器可见,一个名为MapManager的对象存在于客户端服务器中,它充当通过Rpc 调用和一个简单的 spawn 图形(稍后称为视觉 spawn),呈现在客户端服务器的本地播放器上。

每个对象的 NetworkIdentity 设置分别为:

  • 仅服务器,
  • 本地玩家权威,
  • 无 - 是一种 MonoBehaviour。

物理 spawn判断是否对 spawn 造成了任何伤害,如果是,则将标志isHealthChanged设置true

MapManager在物理生成(仅在服务器上检查)和检测到检查标志的状态:

  • 将标志重置为false
  • 获取健康栏的宽度,
  • 将有关健康栏的新宽度和生成数量的信息传递给 RPC 调用RpcChangeSpawnersHealthClients(),该调用调用负责更新视觉生成的健康栏转换数据的函数。

    /li>

这是引发异常的地方:“在 TeamSelector (UnityEngine.GameObject) 上未发现传入 [ClientRpc:InvokeRpcRpcChangeSpawnersHealthClients] 的行为,服务器和客户端应具有相同的 NetworkBehaviour 实例......”

该错误非常有趣,因为提到的TeamSelector实际上与生成器更新无关。一开始就是用来初始化球员的球队数据的,仅此而已。甚至更多 - 一个物理生成物也以某种方式在客户端上生成,但如果我没记错的话,仅服务器选项应该可以防止这种行为,而且我不会尝试通过网络创建对象。

早些时候,我尝试生成带有NetworkBehaviourNetworkIdentity的视觉生成物——即使我在网络管理器中注册了这些对象,甚至使用了 ClientScene.RegisterPrefab()方法,也无法在客户端生成这些对象。使这两者的每一种可能的组合 - 情况没有改变。后来我将视觉生成重新排列为它们当前的形式,并尝试在它们检测到健康变化时立即从物理生成中调用MapManager的 RPC 调用。在客户端引发了与上面引用的类似的异常,但名称为物理生成TeamSelector对象的位置。搜索解决方案没有找到任何可行的方法,例如,我没有任何具有重复名称但属于不同名称空间的方法。

我什至不知道在哪里寻找问题的根源。在与 Unity 争论超过 3 天后,我觉得它只是不想让我创建那个游戏。有谁知道什么会导致问题?

对于这篇文章的长度,我感到非常抱歉,但我不知道如何用更短的方式描述这个问题。