专栏/Mirror快速入门指南(官方文档翻译)

Mirror快速入门指南(官方文档翻译)

2021年06月21日 00:25--浏览 · --点赞 · --评论
无法停止奔跑的马
粉丝:5985文章:35

    这个是Mirror官方文档“Mirror Quick Start Guide”的翻译,我英语不好,所以这个文档是使用机器翻译+人工校对+个人见解的方式处理,有不正确的地方请朋友们指出。

  有时间我会配合这个入门指南做个系列视频,希望能帮助到大家。

  官方原始文档:

https://mirror-networking.gitbook.io/docs/community-guides/quick-start-guide

Part 1

从Unity Asset Store导入Mirror

https://assetstore.unity.com/packages/tools/network/mirror-129321

然后在Unity的Package Manager中导入到项目。这些是基操,不再细说了。

Part 2

  • 创建新的场景,保存它,并添加到Building Setting

  • 创建一个新的游戏对象,在场景中将其命名为NetworkManager,并添加这3个组件

  1.        NetworkManager

  2.        TelepathyTransport

  3.        NetworkManagerHUD

  • 在NetworkManager组件中,将你的离线和在线场景拖到Offline Scene和Online Scene中,我们现在只有一个场景,所以把你的场景都放在两个中

    。场景必须先放在Building Setting中

Part 3

设置场景

  1. 加入一个平台Plane。Transform参数设为positions (0, -1, 0)   scale (2, 2, 2)

  2. (这步操作不是必须的)添加一个材料material 到这个Plane

  3. 下一步,加入一个空游戏对象GameObject,随便起个名字

  4. 在这个空GameObject上加入组件NetworkStartPosition

    (NetworkStartPosition组件的作用是使得Player在指定的位置生成)

  5. 复制这个空的GameObject,这里复制3个GameObject,分别将这4个GameObject放到Plane       的4个角落

Part 4

建立玩家Player

  • 加入一个GameObject胶囊体capsule,位置设为Position(0,0,0)

  • 在这个capsule上加入组件NetworkTransform,这样会自动加入另一个组件NetworkIdentity

  • 在NetworkTransform组件中勾选Client Authority

  • 将capsule改名为Player

  • 建立一个脚本PlayerScript.cs,并加到Player上

  • 将Player拖拽到Preject,这样会建立一个Player的Prefab

  • 在场景中删除Player

  1. 将Project中的Player prefab拖入NetworkManager对象的NetworkManager组件的PlayerPrefab中

  2. 设置PlayerSpawnMethod为Round Robin.

    (Player生成时将会在我们前面指定的4个位置循环生成)

Part 5

修改PlayerScript.cs脚本,加入如下代码

(这是控制Player移动的代码,注意这是继承于NetworkBehaviour,不是MonoBehaviour

Part 6

点击Play按钮运行程序

将会看到左上角有3个按钮,点击“Host (server + client) ”

你将在第一人称视角中控制Player的移动

Part 7

你可以编译一个客户端程序

运行这个客户端程序,点击第二个按钮“Client” 。 点击按钮前请输入正确的IP地址,如果是本机,可以输入“127.0.0.1”或者“Localhost”。

这时候你将在场景中看到2个Player。恭喜,您制作了一个迷你多人游戏

Part 8

  • 在Player的头顶放置Player的名字

    (这是UI的使用,在Player的头顶放置一个UI,可以放置文本Text,也可以放置血条等等)

  • 进入Player Prefab ,建立一个空的GameObject

  • 这个空的GameObject改名为FloatingInfo。(当然也可以起其他名字)将Position设为1.5

  • 在FloatingInfo下加入一个3D text(GameObject - 3D Object - 3D Text)

  • 如下图所示进行设置

Part 9

将PlayerScript.cs的代码改为


Part 10

如下所示,将PlayerNameText和FloatingInfo对象添加到Player Prefab预制件上的脚本中

现在如果你Build并Run ,然后一个运行Host模式,另一个运行Client并加入网络,这时名字和颜色在网络中的同步


Part 11

建立一个空的GameObject,改名为SceneScript。

建立一个SceneScript.cs并加载给SceneScript这个GameObject

建立一个UI Canvas,加入一个Text和Button。类似于下面

在PlayerScript.cs中加入sceneScript 变量和Awake函数、CmdSendPlayerMessage函数。还要将新的playerName加入的行添加到CmdSetupPlayer()


将以下代码加入SceneScript.cs

  • 将ButtonSendMessage函数附加Canvas的Button

  • 将Canvas场景文本Text附加到SceneScript变量。忽略SceneScript的,playerScript变量,它会自动设置这个!

  • 将NetworkIdentity组件附加到SceneScript游戏对象中

如果现在Build和Run,运行一个Host和Client,就可以发送消息message了,你可以在log中看到。

Part 12

武器切换

将下面的代码加入PlayerScript.cs

在Update中增加武器开关按钮。只有本地玩家( local player)才能切换自己的武器,因此需要做isLocalPlayer检查。

Part 13

武器模型

首先简单的添加Cube作为武器,然后再进行更改。

  • 双击Player Prefab,进入Prefab编辑

  • 加入一个空的GameObject,并改名为 "WeaponsHolder" 。

  • 加入一个Cube,删除Cube的box colliders。

  • 将这个Cube改名为Weapon1

复制Weapon1为Weapon2,并改变位置Position和Scale。这样就有了2个不同的武器模型。

Part 14

武器的切换

  • 将这2个GameObjects添加到PlayerScript.cs武器数组Array中

  • 禁用weapon 2,所以只有weapon 1在Player生成时显示。

Build 和run!

你应该看到每个玩家Player切换武器,无论你的玩家装备了什么,都会自动显示在新加入的玩家(同步var和Hook!)


Part 15

在这里,我们将做一些小的调整,因为使用GameObject.Find()可能无法保证找到网络标识的场景对象。在下图中,您可以看到我们的NetworkIdentity场景对象已被禁用,因为它们一直处于禁用状态,直到玩家处于“就绪”状态(通常在玩家Player生成时处于就绪状态)

因此,我们选择的解决方法是让我们的GameObject.Find()获取非联网的场景对象,该对象将这些Network Identity场景对象作为预设变量。

打开SceneScript.cs并添加以下变量。

现在在Unity场景中创建一个空的GameObject,将其命名为SceneReference,然后添加新脚本。在两个Scene游戏对象上,将reference 设置为彼此。因此,SceneReference可以与SceneScript对话,SceneScript也可以与SceneReference对话。

打开PlayerScript.cs并修改Awake函数:

Part 16

菜单和场景切换,

在这里我们将使用Play按钮进入离线菜单,使用back按钮进入 GameList和Host/JoinHUD,然后再到在线地图,再通过Host切换到到第二张地图 。(靠,这段翻译很绕)

打开SceneScript.cs并添加以下代码

复制前面的UI中Canvas下的Button,对其进行重命名(随便什么名字都可以)并改变位置,然后将OnClick()设置为指向SceneScript.ButtonChangeScene,如上图中所示

然后将您的NetworkManager这个GameObject拖到Project中,使其成为Prefab,这样我们以后进行的任何更改都将应用于它们。

Part 17

复制MyScene这个场景文件,复制3个,分别改名为Menu、GamesList和MyOtherScene。然后将这几个Scene文件拖入build settings中

打开“Menu ”场景,删除spawn points,SceneScript,SceneReference,Network Manager 和“Plane这几个GameObject,看起来像下面的图片。

调整Button按钮以并设置文本Text为Play,将其居中。

新建一个Menu.cs脚本文件。

然后在Button中,将Menu游戏对象拖到On Click()上,并将其设置为Menu.LoadScene,如下所示。

Part 18

打开GamesList场景,执行与Menu类似的操作,但保留NetworkManager这个Prefab。

建立一个GamesList.cs脚本文件,加入下面的代码。

在场景中加入一个空的GameObject,改名为GamesList。将场景中的Button的文本Text改为Menu

Part 19

打开MyOtherScene,这是我们的第二张地图,更改相机背景颜色和地板材质。

(这样您就可以看到两个场景都不同。总而言之,MyScene是地图1,MyOtherScene是地图2。)

在PROJECT的NetworkManager Prefab预制体中(不是场景中的一个),将Menu添加到脱机场景Offline Scene,并将MyScene添加到OnlineScene。这将会更改所有NetworkManager预制件以具有这些设置。

   编译并运行(Build and Run)。点击Play按钮进入GameList。然后点击“Host (server + client) 生成第一个玩家Player 1。要生成第二个玩家Player 2,需要再运行一个程序实例,然后点击Play按钮,再点击client connect。

    现在,主机可以在地图1和地图2之间更改场景,并且如果有人断开连接或停止游戏,则将加载菜单场景以重新开始。整个过程可以整理,但是应该为您的Mirror网络游戏提供一个不错的场景切换模板

Part 20

   在这里,我们将使用具有刚体的预制件作为基本的武器射击系统。通常,被发射的物体带有射线投射会更好,并且将物理对象保留在类似手榴弹和炮弹等物体上。为了使指南更简单,本节还缺少一些安全性和反作弊技术,但是无论如何,让我们先把系统运行起来。

   双击Player prefab打开,建立一个空的GameObject,并与武器的末端对齐,将它们作为子对象添加到每种武器中。有些武器可能是短手枪,有些则是长步枪,因此开火时子弹生成的地方会有所不同。

创建一个Weapon.cs脚本,并将其添加到玩家预制体内的Weapon1和Weapon 2游戏对象中。

Part 21

现在回到您的场景中,我们将制作2个子弹,在Unitys菜单中,转到GameObject---3D Object---Sphere,建立一个球体。在该球体中添加刚体,修改比例scale为0.2、0.2、0.2,然后将其保存为Project中的Prefab。我们按照同样的方法在建立一个正方体Cube,执行相同的操作。最后,您会看到两个不同的子弹。

再次在您的Player预制件内,选择一种武器,然后在武器脚本weapon .cs上设置变量。


Part 22

在SceneScript.cs中,添加如下变量和函数

进入MyScene(地图1)。复制Canvas StatusText,重命名为Ammo,然后将该Ammo文本UI拖动到SceneScript游戏对象canvasAmmoText变量中。在MyScene(地图1)和MyOtherScene(地图2)上都进行此操作,因为我们尚未链接或预制画布和场景脚本以自动更新每个地图上的更改。

打开PlayerScript.cs,添加这两个变量:

在“ OnWeaponChanged”函数中, 对其进行更新, 它应如下所示

在Awake()中,在末尾添加如下代码

在Update()中,在末尾添加

在Update(){}函数完成后,添加这两个函数。

编译和运行(Build and Run)。你将会能够使用不同的速度和冷却时间开火。


================================================================

    官方的入门指南是浅显易懂的,至少官方是这么认为的,但对于很多初学者来说,由于基础水平与官方大佬根本不在一个层次上,很多东西不是一下就能理解的,我也是看了很多遍官方文档才慢慢理解学习的,后期我将做个系列视频讲解这个官方的入门指南。

   我只是比大家多学习了几天的人而已,我喜欢将我学习到的东西分享给大家,感谢大家的关注。




投诉或建议

玻璃钢生产厂家运城不锈钢仿古玻璃钢仿铜雕塑玻璃钢奔跑鹿雕塑报价玻璃钢雕塑怎样用玻璃钢雕塑图片厂家电话天津石雕雕塑玻璃钢安徽学校玻璃钢雕塑生产厂家铜陵玻璃钢雕塑价格绵阳玻璃钢仿铜雕塑价格广州小品系列玻璃钢雕塑定做节庆商场美陈供应黄石玻璃钢雕塑人物南京玻璃钢雕塑摆件采购玻璃钢雕塑工艺品大飞马武威玻璃钢雕塑价格水富市玻璃钢雕塑定制闵行区进口玻璃钢雕塑制造厂家江苏玻璃钢雕塑哪家好西安佛像玻璃钢雕塑市场玻璃钢马雕塑艺术小品陆丰玻璃钢胸像雕塑商场美陈工程清单玻璃钢雕塑批发零售山东景区玻璃钢雕塑批发佳木斯仿铜玻璃钢雕塑公司工程用玻璃钢花盆杭州玻璃钢画家雕塑玻璃钢彩绘雕塑浮雕设备泰安小品系列玻璃钢雕塑价格阜阳玻璃钢雕塑定做厂怒江玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化