小米 发表于 2024-7-15 18:50

Unity网络插件Mirror笔记(一)

写在前面

这篇文章是个人向笔记,不完善的处所或许会后续修正或者勘误,或许不会,不适合作为教程使用,但如果能够对初学者有辅佐,我非常高兴。(如果没有辅佐,不要偷偷骂我)
笔者并非游戏工程师,只是做毕业设计临时需要使用unity。
正文

安装mirror库

在unity商店官网搜索mirror,然后【添加到我的unity】。
初始操作

创建空物体并添加networkManager,Transport,networkManagerHUD组件。



通过Add Component添加组件

在networkManager中挂载场景、Transport和Player Prefab。并为玩家对象添加networkIdentity和networkTransport组件,并勾选networkTransport的Client Authority属性。
为玩家组件创建脚本并挂载,在脚本中导入mirror包,并将MonoBehaviour替换为NetworkBehaviour。
这里也需要在networkManager中填写上Scene(包罗Offine和Online)以及Transport和Player Prefab



如图所示

还需要在场景中为角色添加一个或多个出生点:创建空物体,挂载NetworkSatrtPosition脚本,并将该物体拖动到合适的位置。
RPC调用

有三个关键字如果被用于修饰函数,则该函数不会在当地调用,而是在长途调用。、、。

[*]Command在客户端调用,在处事端执行
[*]ClientRpc在处事端调用,在所有与处事端连接的客户端执行
[*]TargetRpc在处事端调用,在指定的与处事端连接的客户端执行,该方式至少有一个NetworkConnection的形参,用来确定是在哪一个客户端执行
出生点

创建空物体,并挂载NetworkStartPosition脚本。并在Player Prerfab插槽中选择玩家对象。
可以创建多个出生点,并在NetworkManager中选择随机(Random)或者轮询(Round Robin)的出生点选择方式。
客户端权限问题

通过islocalplayer来判断是否具有当前对象的权限:
if (!isLocalPlayer) return; //不应操作非当地玩家对于在每个客户端独立生成的对象(这里以每位玩家的camera为例),需要将start方式改削为OnStartLocalPlayer(),这样可以避免多个客户端的摄像机被改削为同一台。
public override void OnStartLocalPlayer()
    {
      //base.OnStartLocalPlayer();
      cam = Camera.main.gameObject;

      cam.transform.rotation = transform.rotation;
      //Camera.main.transform.SetParent(transform);
    }参考文献

UnityMirror学习笔记(1):安装与简单使用-CSDN博客
Unity系列【Mirror安装和试用】 - 简书 (jianshu.com)
【Unity多人联机】Mirror自学笔记 - 简书 (jianshu.com)
unity Mirror使用笔记_mirror unity_晴耕雨読3321的博客-CSDN博客
学习unity的网络处事(网络多人联机)————学习记录_养四只猫的猫叔的博客-CSDN博客
UNITY|Mirror(简单的多人游戏)教程
unity多人联机(Mirror插件)有史以来最全的基础教程(附加报错提示和官方手册改削)_unity mirror_我要取个出格出格出格出格出格出格长的名字的博客-CSDN博客
Mirror Networking - Mirror (gitbook.io)
Unity Mirror联网游戏开发(10) 长途行为之ClientRpc - 掘金 (juejin.cn)
UnityMirror学习笔记(6):权限与运动控制-CSDN博客
页: [1]
查看完整版本: Unity网络插件Mirror笔记(一)