type
status
date
slug
summary
tags
category
icon
password
comment
1. 前置安装
- Unity Netcode for GameObjects(版本:1.2.0)
- 打开 Window → Package Manager
- 搜索并安装 “Netcode for GameObjects”(版本 ≥ 1.2.0)。
在 Package Manager 中导入:
- Unity Transport
在 Netcode 安装完成后,同样在 Package Manager 中安装 “Unity Transport”(UTP)。
- 推荐工具
- Quantum Console:支持在打包后实时查看日志,方便调试。
2. 核心组件:NetworkManager
- 在场景中新建空对象,添加 NetworkManager 组件。
- Transport 选择为 Unity Transport。
- 在 NetworkManager 下配置:
- Player Prefab:将玩家预制体拖入。
3. 玩家预制体配置
- 在玩家预制体上添加 NetworkObject 组件。
- 将所有需要网络同步的脚本从
MonoBehaviour改为NetworkBehaviour,以标记它们为网络脚本。
4. 变换(Transform)同步:NetworkTransform
- 默认行为:
- 服务器(Host/Server)权威,客户端只能被动接收同步数据。
4.1 客户端授权(Client Authority)
如果希望客户端自主移动,并向服务器汇报位置,需要重写
NetworkTransform:- 将原来的
NetworkTransform替换为ClientNetworkTransform。
- 在客户端中通过
ServerRpc告知服务器移动请求。
5. RPC 与移动控制
- ServerRpc:客户端 → 服务器
- ClientRpc:服务器 → 客户端
示例:
注意:RequireOwnership = false 允许非拥有者(即客户端)调用。
6. 动画同步:NetworkAnimator
- 默认也是服务器权威。
- 同样可通过继承关闭服务器权威,实现客户端优先同步:
- 在角色预制体上替换为
OwnerNetworkAnimator,并将所有动画控制逻辑置于继承自NetworkBehaviour的脚本中。
7. NetworkBehaviour 生命周期
- 不建议在
Awake()/Start()中做网络相关初始化。
- 推荐使用:
8. 单例(Singleton)注意
- 多人环境下,玩家对象并非一开始就实例化,避免在
Awake()中将自身注册到全局单例。
- 如需单例管理,建议使用场景管理器(非玩家对象管理) 或者在
OnNetworkSpawn中注册。
9. 生成与销毁网络对象
- 只可由服务端 调用
NetworkObject.Spawn()或Despawn()。
- 客户端通过
ServerRpc请求,服务器收到后执行生成/销毁。
10. 传递复杂类型
- RPC 仅支持基础类型。
- 传递自定义对象时,可使用
NetworkObjectReference:
注意:网络对象 不能 作为非网络对象的子物体。
11. 网络变量(NetworkVariable)
- 写权限:仅服务器
- 读权限:客户端(只读)
- 客户端不能直接访问底层字段,需通过 API 读取
NetworkVariable<T>.Value。
12. 常用属性对照
属性名 | 类型 | 含义 |
IsClient | bool | 当前实例是否运行在「客户端」(含 Host) |
IsServer | bool | 当前实例是否运行在「服务器」(含 Host) |
IsOwner | bool | 此 NetworkObject 是否被本地客户端拥有 |
IsLocalPlayer* | bool | 是否本地玩家对象(旧 API,建议用 IsOwner) |
快速记忆
IsClient:“我是不是客户端?” (能看见画面)
IsServer:“我是不是服务器?” (掌控世界状态)
IsOwner:“这是我控制的对象吗?” (我可以操作)
- 大厅功能API
前置准备
下载Lobby Package包
开启Unity Game Servers服务
公开的大厅在30秒无响应后会自动关闭,使用心跳函数
- Author:qqssdda
- URL:blog.sadaharu.top/article/230d0a21-aa6d-802c-b384-ed5c1c49b1f5
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!



