系列文章目录
unity知识点
文章目录
前言
书接上回,承接下回,一系列的。
博客将会介绍多人游戏学习。希望这篇博客对Unity的开发者有所帮助。
大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
欢迎点赞评论哦.下面就让我们进入正文吧 。
提示:以下是本篇文章正文内容,下面案例可供参考
接上一篇的内容
一、Multiplayer 组件参考
1-1、Network Identity
Network Identity 组件是 Unity 网络高级 API 的核心。该组件可控制游戏对象在网络上的唯一身份,并使用该身份使网络系统识别游戏对象。
属性 | 功能 |
---|---|
Server Only | 勾选此复选框可确保 Unity 仅在服务器上生成游戏对象,而不在客户端上生成游戏对象。 |
Local Player Authority | 勾选此复选框可将此游戏对象的授权网络控制权提供给拥有此游戏对象的客户端。该客户端上的玩家游戏对象拥有针对此游戏对象的授权。其他组件(如 Network Transform)使用此属性来确定将哪个客户端视为授权来源。 |
1-1-1、实例化的网络游戏对象
对于 Unity 的服务器授权网络系统,服务器必须使用 NetworkServer.Spawn 生成具有网络身份的联网游戏对象。这样会自动在连接到服务器的客户端上创建这些游戏对象,并为它们分配 NetworkInstanceId。
您必须在任何在运行时生成的预制件上添加一个“网络标识”组件,以便网络系统能够使用它们。
1-1-2、基于场景的网络游戏对象
还可以将保存为场景一部分的游戏对象(例如,环境道具)联网。网络游戏对象使这些游戏对象的行为略有不同,因为需要在网络上生成这些游戏对象。
在构建游戏时,Unity 会禁用所有具有网络标识组件的基于场景的游戏对象。当客户端连接到服务器时,服务器会发送生成消息,告知客户端应启用哪些场景中的游戏对象以及它们的最新状态信息是什么。这样可以确保客户端开始游戏时其游戏中的游戏对象不会处于错误的位置,或者也能避免在连接时 Unity 生成并立即销毁游戏对象的情况(例如,如果某个事件在该客户端连接之前就移除了该游戏对象)。
1-1-3、预览面板中的 Network Information 部分
此组件包含网络跟踪信息,并在预览面板中显示该信息。例如,已为对象分配的场景 ID、网络 ID 和资源 ID。因此可以检查可用于进行调查和调试的信息。
场景 ID 在具有 NetworkIdentity 组件的所有场景对象中都有效。网络 ID 是此特定对象实例的 ID。可能存在从特定预制件进行实例化的多个对象,而网络 ID 可用于标识应该应用网络更新的对象。资源 ID 表示实例化对象的源资源。在网络上生成特定的游戏对象预制件时会在内部使用资源 ID。
在运行时,此处将显示更多信息(禁用的 NetworkBehaviour 以非粗体显示):
预览面板信息
属性 | 描述 |
---|---|
assetId | 标识与此对象关联的预制件(用于生成)。 |
clientAuthorityOwner | 对该对象拥有授权的客户端。如果没有客户端拥有授权,则此属性为 null。 |
connectionToClient | 与此 NetworkIdentity 关联的 NetworkConnection。此属性只对服务器上的玩家对象有效。 |
connectionToServer 与此 NetworkIdentity 关联的 NetworkConnection。此属性只对本地客户端上的玩家对象有效。 | |
hasAuthority | 如果此对象是对象的授权版本,则为 true。这将意味着是服务器上的普通对象,或者在客户端上具有 localPlayerAuthority 的对象。 |
isClient | 如果此对象在客户端上运行,则为 true。 |
isLocalPlayer | 如果此对象代表本地计算机上的玩家,则返回 true。 |
isServer | 如果此对象在服务器上运行并且已生成,则为 true。 |
localPlayerAuthority | 如果此对象由拥有此对象的客户端控制,则为 true - 该客户端上的本地玩家对象具有针对此对象的授权。由 NetworkTransform 等其他组件使用。 |
netId | 此网络会话的唯一标识符,在生成时分配。 |
observers | 能够看到此对象的客户端 NetworkConnection 列表。此属性为只读。 |
playerControllerId | 与此对象关联的控制器的标识符。仅对玩家对象有效。 |
SceneId | 场景中的联网对象的唯一标识符。此属性仅在播放模式下填充。 |
serverOnly | 此标志用于指示不在客户端上生成该对象。 |
1-2、Network Lobby Manager
NetworkLobbyManager 是一种专用类型的 NetworkManager,可在进入游戏的主游戏场景之前提供多人游戏大厅。此组件可用于设置网络的以下属性:
- 玩家最大限制
- 所有玩家准备好后自动开始
- 用于阻止玩家加入正在进行的游戏的选项
- 支持“Couch Multiplayer”(即每个客户端有多个玩家)
- 可自定义玩家在大厅选择选项的方式
- NetworkLobbyManager 有两种类型的玩家对象:
LobbyPlayer 对象
- 每个玩家一个
- 客户端连接时或添加玩家时创建
- 在客户端断开连接之前一直存在
- 保留就绪标志和配置数据
- 处理大厅中的命令
- 应使用 NetworkLobbyPlayer 组件
GamePlayer 对象
- 每个玩家一个
- 启动游戏场景时创建
- 重新进入大厅时被销毁
- 处理游戏中的命令
属性
属性 | 功能 |
---|---|
showLobbyGUI | 显示大厅的开发者 OnGUI 控件。 |
maxPlayers | 大厅中允许的最大玩家数量。 |
maxPlayersPerConnection | 允许为每个客户端连接添加的最大玩家数。 |
lobbyPlayerPrefab | 当玩家进入大厅时为玩家创建的预制件。 |
gamePlayerPrefab | 当游戏启动时为玩家创建的预制件。 |
lobbyScene | 要用于大厅的场景。 |
playScene | 要用于主要游戏的场景。 |
详细信息
- lobbyPlayerPrefab 字段应该由一个包含 NetworkLobbyPlayer 组件的对象填充。
- There is a GUI for the lobby manager. See the multiplayer-lobby Asset Store package.
Network Lobby Manager 具有许多内置功能,这些功能对于多人游戏来说很常见。例如,它支持设置最大玩家数量限制,在所有玩家准备就绪时自动启动游戏,以及防止玩家加入正在进行的游戏的选项。Network Lobby Manager 还支持“Couch Multiplayer”,让多个玩家使用同一个客户端一起玩游戏。
壁纸分享
总结
书接上回,承接下回,一系列的。欲知后事如何,且听下回分解。
本次总结的就是这样的, 有需要会继续增加功能
如能帮助到你,就帮忙点个赞吧,三连更好哦,谢谢
你的点赞就是对博主的支持,有问题记得留言评论哦!
不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!