问题标签 [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.
websocket - WebGL 和 UNet。似乎无法从浏览器与服务器正确联系
您好我正在尝试使用 UNet 设置通过浏览器播放的多人游戏。在编辑器中一切正常,我按照教程(https://www.youtube.com/watch?v=qGkkaNkq8co)说它应该在 webgl 中工作,但遗憾的是它没有。目前有两个脚本,一个用于客户端,一个用于下面链接的服务器。这主要使用 LLAPI。
我是否使用 networkServer.usewebsocket = true 结果是一样的。
“完成连接”的调试确实显示,因此它完成了 OnConnection 功能。
从编辑器一切正常,但从浏览器我收到以下错误:
“尝试发送到未连接的连接 {1}”——因为我在询问 ASKNAME 和询问 ASKPOSITION 时收到此错误,所以我怀疑 SEND 函数是我试图发送浏览器无法理解的内容的问题。但我不知道为什么。
然后是客户端:
任何反馈都将不胜感激,我已经尝试过查看文档,但我觉得我已经完成了它所说的所有事情(https://docs.unity3d.com/Manual/UNetUsingTransport.html)在它谈话的底部关于 webgl 支持,但它似乎没有奏效。
非常感谢您。
unity3d - 使用 unet Unity 3d 为我的多人游戏制作唯一的玩家名称
我在为我的多人游戏创建独特的玩家名称系统时遇到了困难。我尝试使用 [Command] 获取 playername 变量 [SyncVar] 并将数据发送到服务器,然后使用 [ClientRpc] 从服务器发送数据到客户端,但我没有运气。希望可以有人帮帮我。谢谢!
android - Unity 网络管理员在线对接会
下面的代码是我们如何使用统一网络系统托管或加入游戏。正如您在下面的代码中看到的,有两个输入字段通常采用“localhost”和“7777”。
但是我想创建一个玩家可以托管游戏的游戏,然后他的 IP 和端口将在 UI 文本中显示(例如),他可以将该 IP 和端口发送给其他玩家,他们可以加入游戏。我还是网络新手,有人可以告诉我这可以完成吗,有没有办法加入一个连接到互联网但你不在同一个网络上的主机?注意:我说的是安卓设备。
c# - Unity:从客户端生成对象到所有客户端
我有一个射击子弹的玩家,但只有当射击的玩家是主机时,子弹才会生成给所有客户端。
使用Unity 5.6
我目前所拥有的...
- 我已经在 NetworkManager 中注册了 Prefab。
- Prefab 有一个NetworkIdentity,其中ServerOnly为false,LocalPlayerAuthority为false。
- Prefab 有一个NetworkTransform和一个NetworkSendRate = 0和一个TransformSyncMode来同步 RigidBody2D。
- 玩家使用方法[Command]并使用NetworkServer.Spawn (bulletInstance)射击子弹
- 在调用NetworkServer.Spawn之前,我将速度分配给bulletInstance的 RigidBody2D。
- Bullet Script 类是一种NetworkBehaviour
- 玩家的NetworkIdentity和LocalPlayerAuthority为 true
- Player Script Class 是一个NetworkBehaviour
unity3d - 根据本地玩家 ID(Unity 3d Unet)将生成对象的对象名称更改为客户端和服务器
我有一个通过 Networkserver.spawn(missile) 生成的游戏对象。我想根据本地玩家名称更改产卵导弹的对象名称,但它始终采用服务器玩家名称。我已经使用 [command] 将数据发送到服务器并使用包含服务器命令的 [client] 分发给所有客户端。
unity3d - 在 Unity Networking - UNET 中同步复杂的游戏对象
我正在开发第一人称游戏,玩家可以在其中构建复杂的对象。结构示例:
玩家可以创建火车、添加货车、将对象放入货车、修改放置的对象。整列火车可以移动,物体在变换层次中。
玩家可以与放置的对象进行交互(例如将物品放入箱子,修改车间构建队列),因此我需要一种跨网络识别它们的方法。这表明所有对象都应具有NetworkIdentity
. 一些对象也有需要同步的状态(存储项目、构建队列)。
建议的同步方法是什么?应该有哪些对象NetworkIdentity
?
添加NetworkIdentity
到所有这些阻止我在编辑器中创建火车预制件(预制件NetworkIdentity
只能在根目录下),但我可能会接受。当客户端上生成货车或对象时,我还必须“手动”设置父级。
另一种解决方案可能是NetworkIdentity
仅添加到Train,然后通过train中的某个 ID 识别对象。我无法想象如何使用SyncVar
这种方法,因为一切都必须在Train上。
c# - Unity Networking:当我调用 NetworkManager.singleton.StopClient() 函数时,Unity 崩溃
所以基本上,我想做的就是在用户按下按钮时断开用户的连接。我添加了 NetworkManager.singleton.StopClient(); 我的 customNetworkManager 脚本上的函数,该脚本继承自 NetworkManager 类。但是每当我按下按钮断开播放器时,unity 就会停止响应。有人在另一篇文章中说,可能在执行函数时单元卡在了一个while循环中
所以这是我的脚本:
unity3d - Unity3D - 启动多人架构
我正在开发基于 2D 平铺地图的新 3d 游戏。在开发了最基本的功能(程序地图生成和玩家移动)之后,我想让它在多人游戏中工作。
我已经阅读了整个 HLAPI 文档,并且已经完成了两次 HLAPI 教程,但是我当前的架构似乎与上述教程中显示的架构大不相同。
这是游戏在没有多人游戏的情况下的运作方式:
赛前场景对象:
- 一个带有名为“GlobalController”的脚本的空对象,它将在所有场景中保持活跃,负责场景管理并作为全局数据存储。
- 另一个空的脚本名为“PregameUIController”,这将负责用户与游戏前场景的交互。
- 一个 Canvas 一个其他不相关的对象。
赛前场景主流程:
- 全局控制器从文件中加载游戏定义(图块类型、生物群落类型、实体类型)
- 玩家选择星球的大小和种子,然后点击播放
- 全局控制器创建一个新的planet(c#类,不是monobehaviour,只用于数据存储)准备创建
- 全局控制器将场景更改为行星创建场景
行星创建场景对象: - 行星创建控制器,负责行星创建并向用户显示行星创建的当前状态。
行星创建主流程: - 行星创建控制器(从现在开始的 PCC)从全局控制器获取对行星的引用 - PCC 创建行星地形和实体,同时将过程状态告诉玩家 - PCC 设置起始位置基于复杂算法的行星 - PCC 告诉全局控制器开始播放行星 - 全局控制器创建一个新的 Player(c# 类,不是 monobehaviour,仅用于数据存储)作为 activePlayer,其中将包含播放器的起始位置 - 全局控制器将场景更改为正在播放的场景 - 画布和其他不相关的对象。
播放场景对象:
- 渲染控制器,负责播放器屏幕上显示的内容
- InputController,处理玩家输入
- PlayerController,照顾玩家预制件和他的不同行为
- 一个 Canvas 一个其他不相关的对象。
播放场景主流程:
- 渲染控制器和玩家控制器从全局控制器获取行星和玩家参考
- 渲染控制器将最近的块渲染给玩家
- 播放器控制器实例化播放器预制件
- 输入控制器管理输入要求 playerController 移动播放器
- 移动播放器包括:
- 播放器控制器验证目的地是一个有效的目的地
- playercontroller 要求 playerObject(连接到 playerPrefab 的单一行为)移动
- 当移动结束时,playerObject 修改玩家位置
这就是我试图实现的目标
赛前场景:
- 用户决定是否作为主机或客户端播放
- 如果客户去行星创建场景
- 如果主机设置种子,大小等参数,然后去行星创建
星球创造场景:
- 如果宿主,则正常进行(让我们在通知玩家的同时创建星球,然后创建玩家,最后进入主场景)
- 如果客户:
- 从服务器获取行星数据
- 全局控制器创建一个新的 Player 作为 activePlayer,它将包含播放器的起始位置。(和之前一样)
演奏场景:
- 两个玩家都可以移动并在同一张地图中看到其他移动(目前尚未修改)
- 玩家控制器可以验证玩家是否可以移动到下一个图块(本地验证)
- 当 PlayerPrefab 开始移动时,服务器会收到通知,如果是非法移动,服务器会返回通知并中止 movemet。
问题:
- 使行星只在服务器上生成(复杂的 perlin 算法)。
- 连接时与客户端共享行星信息(包含更多自定义类的自定义类)?
- 使控制器(全局控制器,网络控制器,...)从 NetworkBehaviour 扩展并为其分配一个 NetworkIdentity 然后,如文档中所述,它们将被停用,直到场景被加载,防止将控制器的数据从服务器同步到客户。
- 在我仍然不需要生成它的信息时避免生成 playerPrefab(即使我不在游戏场景中)。
问题:
- 我是否需要重构整个游戏来改变事物之间的交流方式?如果你认为我可以坚持这个架构,你能给我一些指导来完成这项工作吗?
c# - 统一多人游戏控制不起作用
嗨,我正在使用 uNet Unity Multiplayer,但我的播放器控件无法正常工作。我在 1 台设备上连接 2 台设备,它运行良好,但在其他设备上它不会向左或向右移动,也不会跳跃。只有本地玩家可以移动本地角色
这是代码
使用 System.Collections;使用 UnityEngine.Networking;
公共类 Player1 : NetworkBehaviour {
}