首页 > 其他分享 >unity游戏开发之网络篇netcode

unity游戏开发之网络篇netcode

时间:2024-06-11 15:58:56浏览次数:18  
标签:netcode 同步 游戏 玩家 unity 预制 NetworkVariable 服务端 客户端

在多人游戏过程中需要复杂的状态同步机制来支撑多个玩家的状态同步,其中包括位置信息、场景信息、动画信息等等,unity提供了netcode插件来轻松完成这些复杂的网络功能,上手也是非常简单的。下面是该插件使用的基本步骤和注意事项:

1.安装网络组件netcode

2.配置netcode环境(必备)

  • 必须添加的脚本networkManager和unityTransport
  • 同步单个预制体:需要同步的玩家预制体对象Player Prefab(对象要挂载Network Object脚本)
  • 同步多个对象,需创建网络预制体列表

下面这张图中标记了需要同步的单个预制体和预制体列表,最下面使用了unity的网络功能

3.玩家配置

  • 玩家需要挂载networkobject脚本

  • 玩家需要挂载物理碰撞脚本

  • 玩家需要挂载网络动画同步脚本

4.需要了解的概念

  • 一些必要脚本

  • RPC远程方法调用

4.玩家位置同步(注:脚本继承由MonoBehaviour 换成NetworkBehaviour)

使用NetworkVariable同步玩家信息

客户端:不停的上传位置,代码如下:

NetworkVariable<Vector3> _syncPos=new NetworkVariable<Vector3>() { };
NetworkVariable<Quaternion> _syncRot=new NetworkVariable<Quaternion>() { };


[ServerRpc]
 private void UploadTransformServerRpc(Vector3 position, Quaternion rotation)
 {
     _syncPos.Value = position;
     _syncRot.Value = rotation;
 }

服务端:不停的下载位置

private void SyncTransform()
{
    _syncTransform.position = _syncPos.Value;
    _syncTransform.rotation = _syncRot.Value;
}

5.玩家动画同步

6.玩家帧同步,调用以下代码

private void FixedUpdate()
{
    if(!IsLocalPlayer)
    {
        SyncTransform();
    }
}
  • 设置同步频率

7.使用rcp进行数据同步

客户端更新:客户端有消息提交应使用serverRpc标记的方法,serverRpc是从服务端执行的(首先会接收客户端提交的数据,先更新自身,然后调用ClientRpc,让客户端更新)

服务端更新:服务端有消息提交应使用ClientRpc标记的方法,ClientRpc是从客户端执行的(会接收服务端提交的更新数据)

标签:netcode,同步,游戏,玩家,unity,预制,NetworkVariable,服务端,客户端
From: https://blog.csdn.net/qingtian305/article/details/139597497

相关文章

  • 印尼slots游戏pwa推广脸书fb广告代投流程
    印尼slots游戏pwa推广脸书fb广告代投合作流程脸书广告代投合作流程在印尼推广slots游戏PWA(ProgressiveWebApp)的过程中,选择脸书FB广告平台进行投放是一个明智的选择。为了顺利进行这一合作流程,我们需要明确以下几个关键步骤:首先,与广告代投公司建立联系并进行初步沟通。这包......
  • <方块二消>小游戏隐私协议
    <方块二消>小游戏隐私协议欢迎您使用<臣妾要告发熹贵妃工作室>开发的<方块二消>小游戏!在使用本游戏之前,请您仔细阅读以下隐私协议。个人信息的收集与使用1为了提供更好的游戏体验和服务,我们可能会收集一些您的个人信息,例如您的设备标识符、操作系统版本、游戏进度等。2我们承......
  • 5分钟在阿里云上部署了超级玛丽小游戏,是一种什么样的体验?
    大家好,我是java1234_小锋老师,作为程序设计开发人员,云部署项目是最基本的技能。所以锋哥分享下如何在阿里云上部署项目,我们以部署超级玛丽网页小游戏为例,教大家熟悉Linux云服务器,熟悉宝塔应用,学习最基本的项目部署。大家后续也可以搭建的自己的博客和应用。阿里云主机购买......
  • Unity Text Mesh 穿透问题
    0.问题在3D场景中使用TextMesh的时候,字体无法被遮挡,永远在最上层。虽然目前在场景中可以直接使用TextMeshPro,但是实际开发的时候总会有各种各样的情况,可能是兼容老项目,也可能是想保持项目足够简单,不想引入TextMeshPro。这里就只记录如何解决这一问题的方案。1.原因主......
  • C#实验 综合实例:生命游戏 game of life
    C#实验综合实例:生命游戏gameoflife《面向对象实验》嗨,我是射手座的程序媛,期待与大家更多的学习与交流,欢迎添加3512724768一、实验目的1.熟练掌握C#开发,编写WinForm应用程序。2.全面加深面向对象编程的概念,如类、对象、实例化等。3.学会使用C#图形图像编程。二、......
  • 手机上玩 PC 游戏的开源项目「GitHub 热点速览」
    上周国产3A大作《黑神话:悟空》开启预售,同时公布游戏将于北京时间2024.8.20正式上线。这是一款由「游戏科学」开发的西游题材单机·动作·角色扮演游戏,它采用「虚幻引擎5」制作。该引擎并不是完全开源的,但它提供了部分源代码的访问权限。具体来说,就是GitHub账号必须先关联E......
  • 第三人称游戏的相机控制
    第三人称游戏的相机控制Unity已经有了Cinemachine这一强大的插件来辅助开发者更容易地控制相机运动,但我觉得学习一下相机控制背后的原理还是挺有益的,没准哪天就你像定制某种相机控制的功能,又觉得Cinemachine难调呢!本文学习自JasperFlick大神的运动系列教程相机的旋转控制......
  • HTML CSS JS游戏网页设计作业「响应式高端游戏资讯bootstrap网站」
    ......
  • Unity打包时隐藏/删除场景中部分内容
    背景使用Unity编辑器时,我们有时候会将服务端的一些信息通过Unity编辑,但由于这部分内容属于服务端,客户端仅限于编辑器中的编辑,我们并不希望将这部分内容打包出去。因此我们需要在打包时将其隐藏或者删除,但是又不影响编辑器的编辑。打包相关的回调接口IPreprocessBuildWithReport......
  • Ubuntu 24.04 LTS 安装配置 MySQL Community Server 8.4.0 LTS
    1安装 AptRepository​​​​​​​地址MySQL::DownloadMySQLAPTRepositorysudodpkg-imysql-apt-config_0.8.30-1_all.deb #安装mysql8.4ltssudoaptupdatesudoapt-getinstallmysql-server#修改mysqlroot密码策略 2查看版本test@test:~$my......