Unity——Mirror学习(01)

这篇具有很好参考价值的文章主要介绍了Unity——Mirror学习(01)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.下载

Mirror是一个简单高效的开源的unity多人游戏网络框架,Mirror在Unity商店中是免费的,因此直接加入自己的资源库并在导入即可。

官方API地址:https://mirror-networking.gitbook.io/docs

2.使用

1.创建场景的网络管理器

网络管理器是多人游戏的核心控制组件。网络管理器是多人游戏的核心控制组件。

在起始场景中创建一个空游戏对象,然后添加新创建的网络管理器组件。在起始场景中创建一个空游戏对象,然后添加新创建的网络管理器组件。

Unity——Mirror学习(01)

 注:如果没有获取到kcp transport组件,手动添加。

2.创建一个玩家

建立一个cube作为玩家。

添加networkIdentity作为在网络同步的唯一标识。

Unity——Mirror学习(01)

 

只有挂载了networkIdentity,网络中枢才能识别到这个物件,并对之进行同步。接下来将Cube作为一个预制体保存,并在场景中删除,后拖拽预制体到网络中枢的Player Prefab插槽中,以后它的产生就完全依靠网络中枢在连接到主机后自动生成。

注:如果角色预制体托不进player prefab栏,可能是没有挂在network identity组件

添加Network Transform,同步网络中联网游戏对象的位置、旋转和缩放。

 Mirror 目前提供2种Network Transform:

  • Reliable:低带宽,与Rpcs/Cmds/等相同的延迟。

  • Unreliable:高带宽,极低延迟

使用Reliable除非需要超低延迟。

 3.添加玩家初始生成位置

创建几个空物体作为玩家的初始生成位置,添加Network Start PositionNetwork,控制玩家的生成位置要控制玩家的生成位置。

根据Network Manager里面Player Spawn Method(玩家生成方法设置):

1.Random:生成为随机(可能相同的生成位置将被两个或更多玩家使用)

2.Round Robin:循环(使用每个可用位置,直到客户端数超过生成点数)。

4.玩家控制

网络同步需要注意的一些事情:

1.需要用到联网功能的脚本中都要添加using Mirror来使用相应API,并且继承NetworkBehaviour而不是MonoBehaviour。

2.涉及到玩家输入时,首先先要进行isLocalPlayer的判断

为控制游戏对象,添加一个脚本为PlayerControl.cs,继承NetworkBehaviour。

Start函数——>重写OnStartLocalPlayer函数。(OnStartLocalPlayer:仅在client执行,当脚本所在物体为玩家角色时调用,用来设置跟踪相机,角色初始化等)

    public override void OnStartLocalPlayer()
    {
        //摄像机与角色绑定
        Camera.main.transform.SetParent(transform);
        Camera.main.transform.localPosition = Vector3.zero;

        //player初始化
        //player 名称的位置,大小
        name.transform.localPosition = new Vector3(0, -0.3f, 0.6f);
        name.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);

        //随机生成颜色和名字
        ChangedColorAndName();
    }

数据同步:

当服务器的场景中的一个SyncVar的值发生变化时,就同步给其它所有客户端。

    //需要把name和颜色同步给其他玩家,添加同步变量的标记[SyncVar(hook=nameof(FunctionExecOnClient))]
    [SyncVar(hook = nameof(OnPlayerNameChanged))]
    private string playerName;
    [SyncVar(hook = nameof(OnPlayerColorChanged))]
    private Color playerColor;

    //申明OnPlayerNameChanged和OnPlayerColorChanged这两个方法
    //第一个变量(oldstr)是同步变量修改前的值,第二个(newstr)是同步变量修改后的值
    private void OnPlayerNameChanged(string oldstr,string newstr)
    {
        nameText.text = newstr;
    }
    private void OnPlayerColorChanged(Color oldCor,Color newCor)
    {
        nameText.color = newCor;

        playerMaterialClone = new Material(GetComponent<Renderer>().material);
        playerMaterialClone.SetColor("_EmissonColir", newCor);

        GetComponent<Renderer>().material = playerMaterialClone;
    }

玩家名字、颜色的变化,以及远程控制:

    /// <summary>
    /// player 的随机名称和颜色
    /// </summary>
    private void ChangedColorAndName()
    {
        //随机名称和颜色
        var tempName = $"Player{Random.Range(1, 999)}";
        var tempColor = new Color(Random.Range(0, 1f), Random.Range(0, 1f), Random.Range(0, 1f), 1);

        //同步变量进行修改
        CmdSetupPlayer(tempName, tempColor);
    }
    //对于同步变量的修改,使用[Command]标记(针对方法的标记,方法名以Cmd开头)
    //通过这个方法同时对name和颜色进行修改
    [Command]
    private void CmdSetupPlayer(string name,Color color)
    {
        playerName = name;
        playerColor = color;
    }

 移动代码:文章来源地址https://www.toymoban.com/news/detail-475390.html

    private void Update()
    {
        if (!isLocalPlayer) 
        {
            name.transform.LookAt(Camera.main.transform);
            return; 
        }
        var movex = Input.GetAxis("Horizontal") * Time.deltaTime * 110f;
        var movez = Input.GetAxis("Vertical") * Time.deltaTime * 4f;

        transform.Rotate(0, movex, 0);
        transform.Translate(0, 0, movez);

        if (Input.GetKey(KeyCode.Space))
        {
            ChangedColorAndName();
        }
    }

到了这里,关于Unity——Mirror学习(01)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • unity中的的Mirror组件信息

    网络管理器(NetworkManager)是一个用于协调客户端和服务器之间通信的组件。它负责管理网络连接,玩家对象的生成和销毁,以及游戏场景的加载和卸载。它还负责处理客户端和服务器之间的消息传递,例如玩家的移动和游戏状态的变化。 网络身份识别器(NetworkIdentity)用于标识网

    2024年02月10日
    浏览(9)
  • Unity实现用WASD控制一个物体前后左右移动-小白课程01

    Unity实现用WASD控制一个物体前后左右移动-小白课程01

      02 根据业务写代码   完成

    2024年02月09日
    浏览(70)
  • Unity 从0开始编写一个技能编辑器_01_分析需求

    Unity 从0开始编写一个技能编辑器_01_分析需求

    入职以来一直很想实现一个技能编辑器,在积累了一些经验以后,决定利用ScriptableObject开发一个,在此记录 1.简单的需求分析 在游戏开发中,技能系统是一个至关重要的组成部分。技能决定了游戏角色可以执行的各种动作,例如攻击、治疗、移动等。通常,技能由多个元素

    2024年02月09日
    浏览(9)
  • Unity Mirror VR联机开发 实战篇(二)

    Unity Mirror VR联机开发 实战篇(二)

    1、将MirrorExamplesVR工程中的部分文件夹复制到自己的工程中。 1、打开MirrorExamplesVR中的 SceneVR-Common场景。 2、将场景中没用的东西都删掉,只留下面这些,新建一个空物体XR Mirror,将所有剩下的物体拖成XR Mirror的子物体,然后将XR Mirror拖成预制体。 3、将XR Mirror预制体拖进自己

    2024年01月19日
    浏览(7)
  • Unity使用Mirror制作局域网的同步

    Unity使用Mirror制作局域网的同步

    1.新建空物体,为管理脚本的物体:manager,挂载NetworkManager,kcpTransport,NetworkManagerHud. 2.设置玩家出生点,spawnPoint,设置好初始化的position的位置(*),挂载NetworkStartPosition的脚本 3.新建Player的预制体,挂载NetworkIdentity,NetworkTransform(unreliable)的脚本,还有自己的自定义脚本,注意自定义脚本需要

    2024年04月14日
    浏览(11)
  • Unity mirror实现多人同时在线(LINUX)保姆级

    Unity mirror实现多人同时在线(LINUX)保姆级

    话不多说直接开始 1 申请服务器(阿里云/腾讯云) 笔者这边直接白嫖的阿里云一个月,测试学习一个月应该是够了。记得重置密码并记录 申请完成后点击左侧目录找到云服务器。记住这个公有服务器,等等会用到。 2 Unity Mirror 坦克大战场景 在NetworkManager找到对应地址,填写

    2024年02月06日
    浏览(8)
  • Unity + Mirror实现卡牌游戏局域网联机

    Unity + Mirror实现卡牌游戏局域网联机

    局域网联机插件 Mirror:Mirror | 网络 | Unity Asset Store 本地客户端测试多人游戏(不用打包)插件 : ParrelSync Mirror官方文档:General - Mirror (gitbook.io) 导入Mirror Package 创建空物体,添加 Network Manager , Network Manager HUD 以及 KCP Transport (也可以选择其他网络连接方式) 导入 ParrelSyn

    2024年01月23日
    浏览(18)
  • 【Unity学习日记01】Unity的生命周期

    【Unity学习日记01】Unity的生命周期

    参考:Unity官方手册以及Unity生命周期 Unity的生命周期指的是Unity脚本从唤醒到销毁的过程,在这个过程里,Unity脚本会按预定顺序执行大量事件函数。 这些函数全部都是系统定义好的,需要继承MonoBehaviour类才能调用。脚本需要挂在任意游戏对象上,并且一个游戏对象可以挂载

    2024年02月11日
    浏览(6)
  • 机器学习简介[01/2]:简单线性回归

    机器学习简介[01/2]:简单线性回归

    Python 中的机器学习简介:简单线性回归         简单线性回归为机器学习提供了优雅的介绍。它可用于标识自变量和因变量之间的关系。使用梯度下降,可以训练基本模型以拟合一组点以供未来预测。         这是涵盖回归、梯度下降、分类和机器学习的其他基本方

    2024年02月11日
    浏览(9)
  • unity学习笔记--day01

    unity学习笔记--day01

    今天学习制作了一个简单的抽卡功能,学习结束后目录结构如下: .mate文件是unity生成的配置文件,不用管 创建一个空物体,改名为Card。 在Card下挂载以下UI组件: 编写数据脚本并挂载,unity采用c#作为脚本语言。 3-1. 首先定义一个卡牌类,定义卡牌上通用的属性 3-2. 定义一个

    2024年02月12日
    浏览(6)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包