首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Unity 多人游戏框架学习系列二

Unity 多人游戏框架学习系列二

作者头像
心疼你的一切
发布2026-01-20 15:43:07
发布2026-01-20 15:43:07
1150
举报
文章被收录于专栏:人工智能人工智能

前言

设置多人游戏项目 本页面概要介绍设置多人游戏项目时所需的最基本和最常见的事项。在项目的需求方面包括:

  • Network Manager
  • 用户界面(供玩家查找和加入游戏)
  • 联网玩家预制件(供玩家控制)
  • 具有多人游戏感知功能的脚本和游戏对象

根据具体情况,此列表可能会有所变化;例如,在多人国际象棋游戏或实时战略 (RTS) 游戏中,不需要可见的游戏对象来表示玩家。但是,可能仍然需要一个不可见的空游戏对象来表示玩家,并附加一个与玩家操作相关的脚本。

本介绍页面包含上面列出的每一项的简要说明。但是,每个部分都链接到更详细的文档,您需要继续阅读以完全理解它们。

在构建游戏时,还需要了解一些重要概念并做出相应选择。这些概念大体上可概括为:

  1. 客户端、服务器和主机之间的关系
  2. 对游戏对象和操作的控制权这一概念

博客将会介绍多人游戏学习。希望这篇博客对Unity的开发者有所帮助。 大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 欢迎点赞评论哦.下面就让我们进入正文吧 !


提示:以下是本篇文章正文内容,下面案例可供参考

一、介绍 Network Manager

Network Manager 负责管理多人游戏的网络方面。同一时间应在场景中激活一个(且仅一个)Network Manager。

在这里插入图片描述
在这里插入图片描述

Network Manager 是用于管理多人游戏的网络方面的组件。

Network Manager 功能包括:

  • 游戏状态管理
  • 生成管理
  • 场景管理
  • 调试信息
  • 配对
  • 自定义

二、使用 Network Manager

Network Manager 是多人游戏的核心控制组件。首先,在起始场景中创建一个空游戏对象,然后添加 NetworkManager 组件。新添加的 Network Manager 组件如下所示:

在这里插入图片描述
在这里插入图片描述

Editor 中的 Network Manager Inspector 可用于配置和控制与网络相关的许多设置。

注意:每个场景中只应有一个激活的 Network Manager。不要将 Network Manager 组件放在联网游戏对象(具有 Network Identity 组件的游戏对象)上,因为 Unity 会在加载场景时禁用这些组件。

三、生成管理

使用 Network Manager 可管理基于预制件的联网游戏对象生成(联网实例化)。

在这里插入图片描述
在这里插入图片描述

大多数游戏都有一个代表玩家的预制件,因此 Network Manager 有一个 Player Prefab 字段。应为此字段分配玩家预制件。设置玩家预制件后,该预制件将用于为游戏中的每个用户自动生成玩家游戏对象。该机制适用于托管服务器上的本地玩家和远程客户端上的远程玩家。必须将 Network Identity 组件附加到玩家预制件。

分配玩家预制件后,即可作为主机开始游戏,并看到玩家游戏对象生成。停止游戏会销毁玩家游戏对象。如果构建并运行另一个游戏副本并将其作为客户端连接到 localhost,则 Network Manager 会使另一个玩家游戏对象出现。停止该客户端时会销毁该玩家的游戏对象。

除了玩家预制件之外,还必须向 Network Manager 注册要在游戏过程中动态生成的其他预制件。

可将预制件添加到 Inspector 中标记为 Registered Spawnable Prefabs 的列表。还可使用 ClientScene.RegisterPrefab() 方法通过代码来注册预制件。

如果只有一个 Network Manager,则需要向其注册可能在任何场景中生成的所有预制件。如果每个场景中都有单独的 Network Manager,则只需注册与该场景相关的预制件。

四、自定义玩家实例化

Network Manager 使用其 NetworkManager.OnServerAddPlayer() 实现来生成玩家游戏对象。如果要自定义玩家游戏对象的创建方式,可重写该虚拟函数。以下代码显示了默认实现的示例:

代码语言:javascript
复制
public virtual void OnServerAddPlayer(NetworkConnection conn, short playerControllerId)
{
    var player = (GameObject)GameObject.Instantiate(playerPrefab, playerSpawnPos, Quaternion.identity);
    NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);
} 

注意: 如果要实现 OnServerAddPlayer 的自定义版本,必须为新创建的玩家游戏对象调用 NetworkServer.AddPlayerForConnection() 方法,以便生成该游戏对象并与客户端的连接关联。AddPlayerForConnection 会生成游戏对象,因此无需使用 NetworkServer.Spawn()。

总结

书接上回,承接下回,一系列的。欲知后事如何,且听下回分解。 本次总结的就是这样的, 有需要会继续增加功能 如能帮助到你,就帮忙点个赞吧,三连更好哦,谢谢 你的点赞就是对博主的支持,有问题记得留言评论哦! 不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、介绍 Network Manager
  • 二、使用 Network Manager
  • 三、生成管理
  • 四、自定义玩家实例化
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档