问题标签 [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.
unity3d - 如何在网络游戏 Unity3D 中只创建一个 Player 对象?
我尝试在 Unity3D 中创建网络游戏。默认情况下,当游戏开始时,网络管理器会实例化Player
每个Gamer
. 但我想要谁是主机玩家,它将是创建玩家对象。其他人必须问自己“我是主人吗?” 答案是“不”,然后再问自己“PlayerObject 的名称在哪里?” 在这里回答'它是'。那么我怎样才能只实例化一个Player
对象呢?
unity3d - 改变光照强度 Unity 多人游戏
我目前在尝试更改多人游戏中灯光的强度时遇到问题。
开始游戏的人,主机的光强度变化很好。然而连接到主机的人,他们的光强度并没有改变。
我正在尝试使用 [SyncVar] 更改光强度,但是连接到主机的播放器根本看不到光强度变化。这是我的代码:
我的问题是,光强度只对一个玩家,即主机发生变化。我希望所有连接到游戏的玩家的光强度都发生变化。欢迎任何建议。
c# - Unity Multiplayer 客户端输入无效
我尝试做足球比赛是为了好玩,但我遇到了问题
主持人可以拖动或射击,但客户端不能对球做任何事情。但如果我喜欢那样
客户可以用力击球
我也这样做
仍然可以打印在客户端上输入但拖动不是主机可以打印它们
我能做些什么来解决这个问题?
c# - Unity 网络生成延迟
我已经像教程中那样实现了网络游戏,客户端将 Cmd 火发送到服务器,然后服务器将向所有玩家生成子弹。
当我在局域网上玩它时一切都很顺利(ping < 20ms)。但是当我尝试使用 Match Maker 在 Internet 端运行时,ping 大于 80 毫秒,并且子弹在客户端上延迟。
游戏是可以射击的船,所以当船从左向右移动时,我开枪,子弹延迟了。当我检查其他游戏(非统一)时,子弹似乎在本地运行。但它不适用于 Unity,因为网络对象必须在服务器上生成。延迟拍摄仅适用于我的玩家。有什么办法可以解决延迟问题吗?谢谢你的帮助。
networking - Unity:本地(LAN)对接会错误
我正在尝试创建一个简单的多人游戏。我已经设置了一个配对系统,当设备连接到互联网时它工作正常,即成功创建了一个在线大厅。但是,当我尝试在无法访问 Internet 的本地网络上创建一个大厅时,什么也没有发生。
这是我用于托管游戏的代码:
现在,如果设备已连接到 Internet,则游戏已成功托管。但是,如果设备连接到没有互联网服务的 wifi,CreateRoom
则调用该方法时不会发生任何事情。
该CreateRoom()
方法与onClick
按钮的事件相关联。
我是统一网络的新手,希望有人能指出我做错了什么。谢谢。
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 姿势),我什至在本地也看不到任何动画。
显然我做错了什么,我只是不知道为什么。如何在子对象上使用动画器同步动画,或者如果动画器组件附加到播放器(只是一个带有脚本的虚拟胶囊),我如何为模型制作动画。
c# - 如何在使用 NetworkManager Unity 时触发 OnPlayerConnected?
我正在使用 UNet 和 NetworkManager 组件。当玩家连接到服务器时,我正在尝试对我说“我已连接”。我必须把它序列化。我正在使用 NetworkBehaviour,我认为这可能会导致失败。但是我怎样才能序列化呢?
这是我的代码:
c# - Unity NetworkServer / NetworkClient 传输 GameObject
我正在研究 NetworkServer/NetworkClient 之间的统一网络。我不使用网络管理器
这是我的客户代码的一部分。
这是我的服务器代码的一部分。
我有两个问题。
NetworkServer.SendToAll(msgType, msg)
即使没有控制台错误,我使用而不是NetworkServer.Spawn(obj)
根本不起作用的原因。可能的原因是什么?- 上面的代码也有问题。
NetworkServer.SendToAll(mspType, msg)
每当导致colsole 错误消息
ArgumentException:您要实例化的对象为空。
我不明白为什么 newPrefab.p 为空......对于网络编程新手有什么想法吗?
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实际上与生成器更新无关。一开始就是用来初始化球员的球队数据的,仅此而已。甚至更多 - 一个物理生成物也以某种方式在客户端上生成,但如果我没记错的话,仅服务器选项应该可以防止这种行为,而且我不会尝试通过网络创建对象。
早些时候,我尝试生成带有NetworkBehaviour和NetworkIdentity的视觉生成物——即使我在网络管理器中注册了这些对象,甚至使用了 ClientScene.RegisterPrefab()方法,也无法在客户端生成这些对象。使这两者的每一种可能的组合 - 情况没有改变。后来我将视觉生成重新排列为它们当前的形式,并尝试在它们检测到健康变化时立即从物理生成中调用MapManager的 RPC 调用。在客户端引发了与上面引用的类似的异常,但名称为物理生成在TeamSelector对象的位置。搜索解决方案没有找到任何可行的方法,例如,我没有任何具有重复名称但属于不同名称空间的方法。
我什至不知道在哪里寻找问题的根源。在与 Unity 争论超过 3 天后,我觉得它只是不想让我创建那个游戏。有谁知道什么会导致问题?
对于这篇文章的长度,我感到非常抱歉,但我不知道如何用更短的方式描述这个问题。