刚开始学习Unity网络系统时,自己尝试在网上找了一些文章和视频,跟着一步步的做,但后面发现代码一直显示报错,明明自己和视频里的一样,为什么会错呢?于是查看错误的部分,编译器上显示的是“Network被弃用”。根据我以往的经验,弃用的方法应该会有新的方法代替。我在U3D官方文档里查看有关的API,但并没有发现有其他的可用的方法,在手册里看到的“设计多人游戏项目”里需要添加组件,我尝试添加组件,但发现自己项目里没有对应的Network Manager组件,于是上网查如何使用Network Manager组件,发现Unity内置中已经没有Network有关方法了,需要在资源商店中添加Mirror资源进项目里,最终我可以正常使用Network Manager组件了。
以下就是关于Mirror的使用笔记:
1、首先创建一个名Network Manager的空游戏对象,在此对象中添加Network Manager、Kcp Transport、Network ManagerHUD三个组件。
展开Network Manager,将需要测试的场景拖到Scene Management下的Offline和Online Scene中,然后注意Network Info中的Trangsport是否挂载了自身游戏对象(默认会自己挂载)。
2、 创建测试场景就不多说了,接下来就是玩家角色出生点的设置。创建一个名为SpawnPoint空游戏对象,挂载Network Start Position组件。可以多复制几个玩家生成点,放在不同的地方。
3、创建一个测试的游戏对象Player,添加Network Identity、Network Transform组件,勾选Network Transform组件中的Client Authoruty。Player生成预制体放在Assets中,删除Hierarchy中的Player。可自行为角色添加运动脚本,方便观察。
Player脚本:
using UnityEngine;
using Mirror;
public class Player : NetworkBehaviour
{
public override void OnStartLocalPlayer()
{
//摄像机绑定Player
Camera.main.transform.SetParent(transform);
Camera.main.transform.localPosition = Vector3.forward;
}
private void Update()
{
if (!isLocalPlayer) return;
var moveX = Input.GetAxis("Horizontal") * Time.deltaTime * 110f;
var moveZ = Input.GetAxis("Vertical") * Time.deltaTime * 4.0f;
transform.Rotate(xAngle: 0, yAngle: moveX, zAngle: 0);
transform.Translate(x: 0, y: 0, z: moveZ);
}
}
4、返回到Network Manager游戏对象中,在其Network Manager下找到Player Prefab,将刚刚做好的Player预制体拖入其中。Player Spawn Methc可以选择Round Robin,表示循环生成。
5、 在File->Build Settings打包发布。(一定要是自己测试的Scenes哦)
6、运行打包好的游戏启动程序和Unity中的测试程序,一个界面选择Host,另一个界面选择Client,这样你就可以在电脑上实现简易的多用户联机了。
最终的运行图片就不发了,如果还有不懂的可以点击下面链接参考教学视频学习(这是别人的视频)