问题标签 [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 回答
389 浏览

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 支持,但它似乎没有奏效。

非常感谢您。

0 投票
1 回答
340 浏览

unity3d - 使用 unet Unity 3d 为我的多人游戏制作唯一的玩家名称

我在为我的多人游戏创建独特的玩家名称系统时遇到了困难。我尝试使用 [Command] 获取 playername 变量 [SyncVar] 并将数据发送到服务器,然后使用 [ClientRpc] 从服务器发送数据到客户端,但我没有运气。希望可以有人帮帮我。谢谢!

0 投票
1 回答
477 浏览

android - Unity 网络管理员在线对接会

下面的代码是我们如何使用统一网络系统托管或加入游戏。正如您在下面的代码中看到的,有两个输入字段通常采用“localhost”和“7777”。

但是我想创建一个玩家可以托管游戏的游戏,然后他的 IP 和端口将在 UI 文本中显示(例如),他可以将该 IP 和端口发送给其他玩家,他们可以加入游戏。我还是网络新手,有人可以告诉我这可以完成吗,有没有办法加入一个连接到互联网但你不在同一个网络上的主机?注意:我说的是安卓设备。

0 投票
1 回答
2974 浏览

c# - Unity:从客户端生成对象到所有客户端

我有一个射击子弹的玩家,但只有当射击的玩家是主机时,子弹才会生成给所有客户端。

使用Unity 5.6

我目前所拥有的...

  • 我已经在 NetworkManager 中注册了 Prefab。
  • Prefab 有一个NetworkIdentity,其中ServerOnlyfalseLocalPlayerAuthorityfalse
  • Prefab 有一个NetworkTransform和一个NetworkSendRate = 0和一个TransformSyncMode同步 RigidBody2D
  • 玩家使用方法[Command]并使用NetworkServer.Spawn (bulletInstance)射击子弹
    • 在调用NetworkServer.Spawn之前,我将速度分配给bulletInstance的 RigidBody2D。
    • Bullet Script 类是一种NetworkBehaviour
    • 玩家的NetworkIdentityLocalPlayerAuthority为 true
    • Player Script Class 是一个NetworkBehaviour

在此处输入图像描述

0 投票
0 回答
309 浏览

unity3d - 根据本地玩家 ID(Unity 3d Unet)将生成对象的对象名称更改为客户端和服务器

我有一个通过 Networkserver.spawn(missile) 生成的游戏对象。我想根据本地玩家名称更改产卵导弹的对象名称,但它始终采用服务器玩家名称。我已经使用 [command] 将数据发送到服务器并使用包含服务器命令的 [client] 分发给所有客户端。

0 投票
1 回答
2534 浏览

unity3d - 在 Unity Networking - UNET 中同步复杂的游戏对象

我正在开发第一人称游戏,玩家可以在其中构建复杂的对象。结构示例:

玩家可以创建火车、添加货车、将对象放入货车、修改放置的对象。整列火车可以移动,物体在变换层次中。

玩家可以与放置的对象进行交互(例如将物品放入箱子,修改车间构建队列),因此我需要一种跨网络识别它们的方法。这表明所有对象都应具有NetworkIdentity. 一些对象也有需要同步的状态(存储项目、构建队列)。

建议的同步方法是什么?应该有哪些对象NetworkIdentity


添加NetworkIdentity到所有这些阻止我在编辑器中创建火车预制件(预制件NetworkIdentity只能在根目录下),但我可能会接受。当客户端上生成货车或对象时,我还必须“手动”设置父级。


另一种解决方案可能是NetworkIdentity仅添加到Train,然后通过train中的某个 ID 识别对象。我无法想象如何使用SyncVar这种方法,因为一切都必须在Train上。

0 投票
1 回答
832 浏览

c# - Unity Networking:当我调用 NetworkManager.singleton.StopClient() 函数时,Unity 崩溃

所以基本上,我想做的就是在用户按下按钮时断开用户的连接。我添加了 NetworkManager.singleton.StopClient(); 我的 customNetworkManager 脚本上的函数,该脚本继承自 NetworkManager 类。但是每当我按下按钮断开播放器时,unity 就会停止响应。有人在另一篇文章中说,可能在执行函数时单元卡在了一个while循环中

所以这是我的脚本:

0 投票
0 回答
346 浏览

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(即使我不在游戏场景中)。

问题:

  • 我是否需要重构整个游戏来改变事物之间的交流方式?如果你认为我可以坚持这个架构,你能给我一些指导来完成这项工作吗?
0 投票
1 回答
192 浏览

c# - 如何禁用第三人称控制器的跳转 - Unity C#

我有一个问题,我使用 c# 统一制作对话文本。好吧,我需要知道如何禁用第三人称控制器(统一的默认播放器)的跳跃,因为看不好。

像这样 :

在此处输入图像描述

这是代码:

我试试

请帮助我,我不知道如何解决它。

谢谢!!

0 投票
1 回答
161 浏览

c# - 统一多人游戏控制不起作用

嗨,我正在使用 uNet Unity Multiplayer,但我的播放器控件无法正常工作。我在 1 台设备上连接 2 台设备,它运行良好,但在其他设备上它不会向左或向右移动,也不会跳跃。只有本地玩家可以移动本地角色

这是代码

使用 System.Collections;使用 UnityEngine.Networking;

公共类 Player1 : NetworkBehaviour {

}