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

Unity NetworkCode项目实例1

Unity NetworkCode项目实例1

  • 安装Netcode for GameObjects
    • Netcode for GameObject的三种角色
      • Host
      • Server
      • Client
    • 常用的组件
      • NetcodeManager网络管理者
      • NetcodeObject 网络物体标识
      • NetcodeTransform同步更新Transform
      • NetcodeAnimator同步更新Animator
      • ServerRPC和ClientRPC
  • 场景初始化
    • 场景初始化
      • 创建四个场景并BulidSetting
      • 对Init的布置
  • 建立连接
    • 导入字体
    • 创建SceneCtr脚本
      • 局域网联机或外网联机
      • 其他玩家加入服务器的场景
        • 更改GameManager脚本
        • 在SceneCtr脚本调用GameManager
  • 搭建游戏大厅场景
  • 实现添加本地玩家
    • 获取Canvas上的内容
  • 添加网络上的其他玩家
  • 实现数据通信、更新准备状态
    • 更新本地
  • 添加游戏角色,选择性别

安装Netcode for GameObjects

Netcode for GameObject的三种角色

Host

建立服务器,并在服务器的位置建立客户端

Server

建立服务器

Client

建立客户端

常用的组件

NetcodeManager网络管理者

NetcodeObject 网络物体标识

NetcodeTransform同步更新Transform

NetcodeAnimator同步更新Animator

需要把Animator挂载到本物体,只能同步更新本物体上的。

ServerRPC和ClientRPC


场景初始化

场景初始化

创建四个场景并BulidSetting

对Init的布置

在场景中创建两个空物体,并分别命名为GameManager和Network Manager
给NetworkManager添加NetworkManager组件,并配置
创建一个人物物体并添加组件NetwotkObject变成预制体拖给PlayerPrefab
Create->Netcode->Network Prefabs list拖到list中

###创建GameMananger脚本

voidStart(){//当加载新场景时不销毁当前场景DontDestroyOnLoad(gameObject);SceneManager.LoadScene(1);}

建立连接

AssetStore导入SharpUI GUI资源,跳过更新,导入Textures

导入字体

将.ttf后缀的拖入unity
TMP:右击->create->TextMeshPro->FontAsset

创建SceneCtr脚本

publicclassSeneceCtr:MonoBehaviour{[SerializeField]Transform_canvas;voidStart(){ButtoncreateBtn=_canvas.Find("CreateBtn").GetComponent<Button>();ButtonjoinBtn=_canvas.Find("JoinBtn").GetComponent<Button>();createBtn.onClick.AddListener(OnCreateClick);joinBtn.onClick.AddListener(OnJoinBtnClick);}//做服务器privatevoidOnCreateClick(){NetworkManager.Singleton.StartHost();}//作客户端privatevoidOnJoinBtnClick(){NetworkManager.Singleton.StartClient();}

本机地址127.0.0.1

局域网联机或外网联机

...privateTMP_InputField_ip;voidStart(){...//ip地址的输入框_ip=_canvas.Find("IP").GetComponent<TMP_InputField>();}//做服务器privatevoidOnCreateClick(){//服务器使用的传输主机vartransport=NetworkManager.Singleton.NetworkConfig.NetworkTransportasUnityTransport;//设置IP和端口信息transport.SetConnectionData(_ip.text,777);...}//作客户端privatevoidOnJoinBtnClick(){vartransport=NetworkManager.Singleton.NetworkConfig.NetworkTransportasUnityTransport;transport.SetConnectionData(_ip.text,777);...}

其他玩家加入服务器的场景

更改GameManager脚本
publicclassGameManager:NetworkBehaviour{publicstaticGameManagerInstance;voidStart(){Instance=this;...}publicvoidLoadScene(stringsceneName){//网络加载场景,其他玩家加入房间进入服务器可以加载他所在的场景NetworkManager.SceneManager.LoadScene(sceneName,LoadSceneMode.Single);}
在SceneCtr脚本调用GameManager
privatevoidOnCreateClick(){...//Lobby是场景名GameManager.Instance.LoadScene("Lobby");}

搭建游戏大厅场景

实现添加本地玩家

获取Canvas上的内容

1、创建LobbyCtrl脚本控制游戏界面

publicclassLobbyCtrl:NetworkBehaviour{[SerializeField]privateTransform_canvas;privateTransform_content;privateGameObject_originCell;privateButton_starBtn
http://www.jsqmd.com/news/749444/

相关文章:

  • 基于Selenium与Playwright的自动化简历投递工具设计与实战
  • 从‘穿透’到C++17新特性:深入理解C/C++ switch-case的设计哲学与编译器行为
  • Zebra异步化接口深度剖析:提升数据库请求效率的5个关键技巧
  • Android 圆角进度条终极指南:RoundedProgressBar 完全教程
  • 使用 OpenClaw 配置 Taotoken 作为 Agent 工作流后端
  • 告别网页卡顿!用mmWave Demo Visualizer 3.1本地版搞定xWR1642雷达数据可视化
  • Unmanic源码架构解析:理解核心组件与插件系统设计原理
  • ExpandingCollection Android 最佳实践:如何设计优雅的卡片交互体验
  • 我在Stripe Sessions 2026读懂AI经济学
  • ROOT优化器:提升大规模语言模型训练稳定性的创新方案
  • 微型固态电池在低功耗物联网设备中的应用与设计
  • 从平均数与中位数差异透视社会两极分化
  • 从蓝桥杯赛题看单片机系统设计:如何用STC15搭建一个简易数据采集与显示系统?
  • Pulley源码架构分析:理解抽屉UI的核心实现原理
  • WR.DO短链服务高级功能:密码保护、过期时间、访问统计
  • 环境配置与基础教程:生产级落地数据洗理:FiftyOne 视觉数据集探索工具实战,精准定位漏标与误标样本
  • Karasu 终端优先色彩方案:现代开发者的视觉统一与工程实践
  • 别再让WSL吃光C盘!保姆级教程:将Ubuntu 20.04完整迁移到D盘(附数据无损转移技巧)
  • 终极指南:如何使用Realm移动数据库打造高性能应用
  • XUnity AutoTranslator完整指南:让所有Unity游戏都变成你的母语版
  • Tracecat:AI原生安全自动化平台,用智能体与低代码重塑安全运营
  • 别再数磁铁了!用ODrive驱动DJI 3508电机,手把手教你搞定TLE5012B磁编码器接线与校准
  • 终极TemplateStudio页面模板指南:从空白页到复杂布局的完整实现方案
  • QML TabBar与StackLayout联动教程:构建你的第一个多视图桌面应用
  • Rally 性能优化实战:10个提升 Elasticsearch 性能的关键技巧
  • 5步掌握MAA助手:明日方舟全自动游戏助手终极使用指南
  • 告别SPI龟速:用AT32F437的QSPI四线模式加速读写恒烁ZB35Q01A NAND Flash实战
  • 5个步骤掌握XUnity.AutoTranslator:彻底解决Unity游戏语言障碍
  • 别再死磕PID了!用Python从零实现一个ADRC控制器(附完整代码与调参心得)
  • 政务数据开放平台建设:标准化与自动化实践