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

unity3d - 命令未从客户端触发

此代码位于播放器上,对菜单中的按钮按下作出反应,其想法是当第一次按下按钮“btn_MenuKill”时它变为橙色,下次将颜色更改回原始黄色并执行“打印( "FIRE THE PROCESS")",在 SyncVar Hook "void ProcessKillObject(bool _MP_Orange) {" 中。

这是情况/问题:

在编辑器中启动主机

1)单击主机客户端(编辑器)上的按钮= [命令]有效

2)单击远程客户端上的按钮=不起作用,不要关闭[命令]

在生成的“远程”客户端中启动主机

1)单击主机客户端上的按钮= [命令]有效

2)单击远程客户端上的按钮= [命令]有效

我不明白为什么当主机在编辑器上并且我使用遥控器上的按钮时 [Command] 不起作用。

这是代码:

0 投票
1 回答
103 浏览

unity3d - RemoveClientAuthority() 在 5.4.0 F3 中似乎仍然被破坏。这是一个BUG吗?...或者我做错了什么

这与http://forum.unity3d.com/threads/re...ms-to-be-broken-in-5-2-1.359149/#post-2785856中的问题相同

我的问题如下:

1) 为对象分配客户端权限:AssignClientAuthority

2)移动对象,有效

3)应用 RemoveClientAuthority 并且对象在客户端恢复到原始位置。“TEST”调用只是为了查看它是否适用于最后一个对象。

这是一个错误还是我做错了什么?

这是我做的一个测试的代码示例:

RPC:

Cmd_LocalAuthority:

0 投票
1 回答
1699 浏览

c# - C# - 如何同步“玩家统计”实例列表?(统一)

这可能是一个菜鸟问题,但对我来说很重要。我也认为这是一个有趣的话题。

我将 C# 与新的 Unity Multiplayer 一起使用。你可以在这里找到教程:https ://unity3d.com/learn/tutorials/topics/multiplayer-networking - 我正在研究这个基础。我刚刚成功地编写了我的代码,以便当玩家加入或主持时,他将他的“玩家统计信息”作为“PlayerStats”类的实例添加到静态列表中。它应该对每个玩家都以这种方式工作 - 每当有人加入时,他的统计数据实例就会添加到列表中。

现在,这个列表应该是一个,全局的,所以我想 - 它应该由服务器同步。也许是某种SyncVar,可能SyncList是某种类型。问题来了——有什么方法可以同步类实例列表吗?

我检查了 Unity 文档,这似乎很糟糕。或者也许我理解错了。SyncList 似乎只有整数等基本类型,还有一个结构,但是......我真的需要将带有玩家统计信息的类转换为结构以进行服务器范围的同步吗?

再一次我想要实现的目标:我需要有一个全球玩家列表,新加入的玩家将被添加和识别。我已经完成了识别——在添加新实例时,我给那个玩家一个ID = PlayerList.Count - 1. ID 是静态的,但应该是本地的。如果 PlayerList 的元素可以是 PlayerStats 类实例,那可能是最好的。所以每个玩家(在他自己的索引处)将他的数据从磁盘加载到他在 PlayerList 中的实例中。我认为那样会很方便(虽然不知道该怎么做)。它在单人模式下工作,但在多人游戏中我不知道如何正确设计它。因为我需要该静态列表是服务器范围的,了解其他玩家。

如果我必须同步设备,这些设备是由我的项目中的类组成的。

你能帮我设计一下吗?我正在尝试基于我们新的 Unity Multiplayer 教程创建一个简单的多人 rpg。现在需要识别玩家并将他们的数据加载到适当的位置,这些数据已经由角色生成器生成并保存,并且已经在单人游戏中正确加载。我想我应该使用 PlayerStats 类的本地单例实例来获取玩家数据,并将这些实例保存在全局服务器范围的列表中。我的 PlayerStats 是 PlayerStatsObject 的一个组件(gameobject在具有 的层次结构中为空DontDestroyOnLoad)。PlayerStats 类,制成单例实例,包含整个生成的角色,以及他的生命体征、职业、种族、由职业组成的装备列表等。

所以基本上,我需要将每个玩家都添加到列表中,拥有自己的 PlayerStats,并使这些 PlayerStats 易于与其他玩家交互/修改(以及 AI 敌人/环境,但这很容易,它是单人游戏)。将 PlayerStats 作为一个组件添加到 Player prefab 对我来说似乎有点过头了,因为游戏中几乎所有东西都会一直调用这些统计数据。所以这是一吨GameObject.Find("Player").GetComponent<PlayerStats>();。似乎那将是灾难性的设计。

0 投票
1 回答
3634 浏览

c# - 如何在 Unity 中获取 NetworkServer 的实际连接数

我将为我的 Unity 游戏项目开发一个简单的多人游戏。我从 HLAPI 开始,但它在生成和同步状态时似乎非常慢,所以我决定从https://docs.unity3d.com/Manual/上的基本示例开始研究 Unity Internet 服务。 UNetInternetServicesOverview.html。这里的问题在于过时的参考资料,所以我不确定我的麻烦的原因是我的误解还是错误的框架。(

反正我拿了第一个例子,开始修改它,无法理解服务器的“连接”和“客户端”之间的对应关系。

即,

  • 我确实用networkMatch.CreateMatch方法创建了一个匹配项。
  • 然后在OnMatchCreate回调中我检查NetworkServer.connections.Count- 它的值是 0。
  • 然后我调用networkMatch.ListMatchesmatchInfoSnapshot.currentSize在回调中查看创建的匹配项 - 它是 1。
  • 我检查NetworkServer.connections.Count了同一个回调 - 它仍然是 0 (!!!)。我检查NetworkServer.localConnections.Count- 它也是 0。

好的,我假设本地客户端没有与服务器产生任何连接(???),让我们检查一下。

  • 然后我networkMatch.JoinMatch从同一个客户打来电话——它成功了。
  • 然后我networkMatch.ListMatches再次打电话并在回调中看到matchInfoSnapshot.currentSize我的比赛 - 现在是 2。
  • 我检查NetworkServer.connections.Count了同一个回调 - 现在也是 2 (!!!) (而NetworkServer.localConnections.Count仍然是 0)。

所以,问题很简单——我不希望添加任何愚蠢的计数器变量,但是...... 我怎样才能获得服务器上连接客户端的实际数量

PS:简化的测试脚本:

它是控制台输出: 控制台输出

0 投票
3 回答
1167 浏览

unity3d - Unity 5.4 UNetWeaver 错误:ResolveMethod 失败

即使在空项目中,我也会遇到此错误。

我正在使用 Unity 5.4.03

0 投票
1 回答
4350 浏览

c# - 如何在 UNet(Unity) 中的客户端上调用 [Command]

我正在使用 UNet 开发 Unity 2D 多人游戏。我的问题是客户端无法将其发送[Command]到服务器。我在 UnityEditor 上调试,并为我的 android 手机构建了一个 apk。

首先我使用 UnityEditor 作为主机,手机作为客户端,Debug.Log(SkinName) APPEARS on the console.

然后我使用 UnityEditor 作为客户端,手机作为主机,Debug.Log(SkinName) DOES NOT APPEAR.

我尝试使用[ClientRpc]而不是,[Client]但它只会让情况变得更糟,客户端和主机都不会同步。我不知道我是否以正确的方式执行了 [ClientRpc]。(我是 UNet 的菜鸟)

我访问了其他线程/论坛和其他 UNet 教程来寻找解决方案,但这就是我想出的。

注意:在我访问的其他线程上,人们大多建议未选中本地玩家权限,这就是导致问题的原因,但在这种情况下是CHECKED.

代码:

}

0 投票
1 回答
267 浏览

c# - UNET - 同步。非玩家对象的颜色脚本

我已经尝试解决这个问题好几个星期了,但没有成功,我真的需要帮助。

当我在实际播放器对象上启动颜色同步时,我能够在我的非播放器对象上同步颜色。

但是,我遇到的问题是我想将脚本附加到管理颜色同步的非播放器对象。我对位置和旋转同步也有同样的效果。

当我拖动非玩家对象时,我将其着色为红色,当我放下拖动时,我将其重新着色为白色。但是,我在拖动远程客户端时遇到授权问题,这就是我认为我无法解决的原因。

这是顺序:

  1. On-DragStart a) AssignNetworkAuthority b) 将颜色更改为红色
  2. On_DragEnd a) 重绘为白色 b) ReleaseNetworkAuthority

当我从远程客户端执行此操作时,出现权限错误。我的结论可能是错误的,即分配-删除权限语句由于某种原因与绘画不同步。

这是我使用的代码(之前分配了 childGameObject):

这是附加到非播放器对象的实际sync.script:

同步。脚本用于测试,所以当我启动 Cmd_DoColor 时并没有真正优化。最后,我将添加一个 if 语句并检查颜色是否已更改。

0 投票
1 回答
1136 浏览

c# - 在网络上实例化两个不同的玩家对象

我在网络多人游戏中为玩家使用两个不同的对象。unity network Manager将实例化两种不同的 Gameobject,但问题是playerprefab只有一个属性。即使我试图在运行时更改它,我如何设置两个不同的对象,但它给了我错误。

无法生成服务器对象,assetId=4d293c8e162f3874b982baadd71153d2 netId=1 UnityEngine.Networking.NetworkIdentity:UNetStaticUpdate()

无法生成服务器对象,assetId=4d293c8e162f3874b982baadd71153d2 netId=7 UnityEngine.Networking.NetworkIdentity:UNetStaticUpdate()

0 投票
1 回答
1597 浏览

c# - VR 播放器控制器未向角色控制器显示

我正在开发一个普通角色控制器用户VR 用户可以参与的多人游戏。所以有两种模式的游戏通过用户可以加入,

  1. 普通模式(字符控制器)
  2. VR 模式(HTC VR 耳机)

我能够管理这些模式,用户可以参与任何模式,但问题是普通玩家(角色控制器)无法查看 VR 控制器(HTC Vive 控制器),因为这些对象在角色控制器一侧关闭。 那么我如何向普通玩家展示 VR 玩家当前正在做什么的 VR 控制器

(我已经尝试过)我制作了一个对象并尝试模仿其相对于 VR 控制器的位置和旋转,但它无法正常工作,因为模仿源(VR 控制器)对象已关闭(在正常玩家端但在 VR 模式下工作)他们的立场没有改变。如何在 unity3d 中向其他用户展示 VR 控制器?

0 投票
1 回答
61 浏览

networking - Unity3d HLAPI、Unet、网络感知生成

您好,我正在尝试统一创建我的第一个游戏,我想了解网络,但我遇到了网络预制产生的问题。这是我的代码:

编译器说没有问题,但统一起来我有这样的错误:“UNetWeaver 错误:脚本生成器使用 [Command] CmdSpawnBuilding 但不是 NetworkBehaviour。UnityEngine.Debug:LogError(Object)”我的代码在没有“[Command ]" 行,尽管它不是网络感知的。另外,我知道这有点混乱,但我试图找出问题所在,所以是的,代码有点混乱。