当前位置: 首页 > news >正文

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

系列文章目录

unity知识点


文章目录

  • 系列文章目录
  • 前言
  • 一、NetworkManager 设置
  • 二、玩家预制件设置
  • 三、玩家移动
  • 四、玩家的基本游戏状态
  • 五、网络化操作
  • 六、非玩家游戏对象
  • 七、生成器
  • 八、玩家生成位置
  • 九、大厅
  • 壁纸分享
  • 总结


前言

接上一篇的继续分解
本文将介绍使用新的 Unity Multiplayer 网络系统将单人游戏转换为多人游戏的步骤。本文描述的过程是真实游戏实际过程的简化浓缩版本;实际情况并不完全与此相同,但提供了该过程的基本方案。

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


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

一、NetworkManager 设置

  • 在场景中添加一个新的游戏对象,然后将其重命名为“NetworkManager”。
  • 在“NetworkManager”游戏对象中添加 NetworkManager 组件。
  • 在游戏对象中添加 NetworkManagerHUD 组件。这样可提供用于管理网络游戏状态的默认 UI。

二、玩家预制件设置

  • 找到游戏中玩家游戏对象的预制件,或者基于玩家游戏对象创建预制件
  • 在玩家预制件中添加 NetworkIdentity 组件
  • 在 NetworkIdentity 上选中 LocalPlayerAuthority 复选框
  • 将 NetworkManager 的 Spawn Info 部分中的 playerPrefab 设置为玩家预制件
  • 从场景中删除玩家游戏对象实例(如果在场景中存在)

三、玩家移动

  • 在玩家预制件中添加 NetworkTransform 组件
  • 更新输入和控制脚本以采用 isLocalPlayer
  • 修正摄像机以使用生成的玩家和 isLocalPlayer

例如,以下脚本仅处理本地玩家的输入:

using UnityEngine;
using UnityEngine.Networking;public class Controls : NetworkBehaviour
{void Update(){if (!isLocalPlayer){// 如果不是本地玩家,则退出更新return;}// 处理玩家的移动输入}
}

四、玩家的基本游戏状态

  • 将包含重要数据的脚本放入 NetworkBehaviour 而不是 MonoBehaviour
  • 将重要的成员变量放入 SyncVar

五、网络化操作

  • 将执行重要操作的脚本放入 NetworkBehaviour 而不是 MonoBehaviour
  • 将执行玩家重要操作的函数更新为命令

六、非玩家游戏对象

修正非玩家预制件,如敌人:

  • 添加 NetworkIdentify 组件
  • 添加 NetworkTransform 组件
  • 在 NetworkManager 中注册可生成的预制件
  • 用游戏状态和操作来更新脚本

七、生成器

  • 可将生成器脚本更改为 NetworkBehaviour
  • 修改生成器以便仅在服务器上运行(使用 isServer 属性或 OnStartServer() 函数)
  • 为创建的游戏对象调用 NetworkServer.Spawn()

八、玩家生成位置

  • 添加一个新的游戏对象并将其放置在玩家的起始位置
  • 在新游戏对象中添加 NetworkStartPosition 组件

九、大厅

  • 创建大厅场景
  • 在场景中添加一个新的游戏对象,然后将其重命名为“NetworkLobbyManager”。
  • 在新游戏对象中添加 NetworkLobbyManager 组件。
  • 配置管理器:
    1. 场景
    2. 预制件
    3. 生成器

壁纸分享

在这里插入图片描述

总结

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

http://www.dtcms.com/a/286950.html

相关文章:

  • YT Config Tool 添加FreeRTOS模块
  • 【linux V0.11】kernel(水)
  • 2025年6月GESP(C++二级): 幂和数
  • 游戏盾能否保护业务免受DDoS攻击吗?
  • Django母婴商城项目实践(五)- 数据模型的搭建
  • 【Python练习】 049. 编写一个函数,实现简单的文本编辑器功能,支持增删改查
  • 你的品牌需要一个AI首席内容官——解构BrandCraft如何解决内容创作的终极痛点
  • 枚举算法入门
  • 【2025/07/18】GitHub 今日热门项目
  • 北斗网格位置码详解:经纬度到二维网格码的转换(非极地)
  • 针对BERT模型的理解
  • 04-三思而后行:解锁AI的“内心戏”
  • VMware安装Win10教程(附安装包)虚拟机下载详细安装图文教程
  • chainlink VRF中文教程(含mock),解决error: Arithmetic Underflow in createSubscription
  • bmp图像操作:bmp图像保存及raw与bmp转换
  • 二分答案之第 K 小/大
  • CMake指令:常见内置命令行工具( CMake -E )
  • 乙烯丙烯酸酯橡胶市场报告:性能优势、行业现状与发展前景​
  • selenium后续!!
  • 【数据集】1970-2023年全球温室气体排放 GHG 数据集 EDGAR
  • 语音直播和视频直播的测试要点
  • 【ROS1】06-ROS通信机制——话题通信
  • OOA、OOD 与 OOP:面向对象范式的核心支柱详解
  • 接口测试的原则、用例与流程详解
  • ModelSim 配合 Makefile 搭建 Verilog 仿真工程
  • Docker-下载和安装
  • ADVB协议内容分析
  • LeetCode Hot100【6. Z 字形变换】
  • GI6E 加密GRID電碼通信SHELLCODE載入
  • CCF编程能力等级认证GESP—C++3级—20250628