unity多人联机(Mirror插件)有史以来最全的基础教程(附加报错提示和官方手册修改)

这篇具有很好参考价值的文章主要介绍了unity多人联机(Mirror插件)有史以来最全的基础教程(附加报错提示和官方手册修改)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

START👀

(☞゚ヮ゚)☞Mirror简介☜(゚ヮ゚☜)

组件介绍:

组件1:NetworkManager

组件2:NetworkManagerHUD(需要配合Network Manager组件)

组件3:NetworkIdentity

组件4:network discovery&network discoveryHUD

错误注意:

最后,对手册内容的一点修改:


今天我们只讲代码和组件,大家拿小本本记好了,字数比较多,大家不妨点个关注?

START👀

谁不想简单的用unity做一个好玩的多人游戏呢ヾ(•ω•`)o?但unet已经network类写代码又太麻烦,mirror unity,unity,unity,c#

用photon插件又不习惯,这时,Mirror插件降临了......


(☞゚ヮ゚)☞Mirror简介☜(゚ヮ゚☜)

Mirror是unity store里的一个插件,当然下载地址大家自己去找吧!嗯。。。看在你们那么诚恳要求我,那就:Mirror | 网络 | Unity Asset Store

那可能有人问了,有那么多多人联机插件,那为什么非要选mirror呢?嗯。。那是因为mirror插件更符合unet老手(dalao)的习惯, 他与unet极其相似,可以说是没有区别,而且他是unet的bug修复版,连接更稳定。相比之下photon就不是很习惯(不是贬低photon),瞧,格局不就打开了?

Mirror对unet:“哥哥,哥哥~我和你那么想,你好朋友photon不会生气的吧~(●ˇ∀ˇ●)


组件介绍:

组件1:NetworkManager

这个组件研究过unet的应该都知道,但为了新手着想,我们详细介绍一下。啊,我真是太仁慈了!

mirror unity,unity,unity,c#mirror unity,unity,unity,c#

第一个Configuration栏和第三个network Iofo我们都默认,基本是没必要改动的(要改最好也在代码里改),offline和online是离线界面和游戏界面,

比如说我们新建一个offline场景,在里面放一个network manager的network managerHUD(等会会讲),然后再新建一个online场景,把他们都注册到build setting(生成设置)里的build里的场景栏中(拖进去),offline在上。然后我们进入offline场景,运行,点击host,便会进入online(在线场景)。

        -----------------------------------------------分割线-------------------------------------------------------

player Object栏:

玩家预制件(Player Prefab):这个不需要解释吧。

自动创建播放器(Auto Create Player):默认勾选,勾选的话当连接服务器时会自动生成上面的“玩家预制件”。

玩家生成方法(Player Spawn Method):如果要做一个合理的多人游戏,就要有若干个出生点,我们再场景中新建一个空物体,然后在他身上挂载一个network start position组件,他的坐标就是我们的出生点啦,当然我们可以把它复制粘贴若干个出生点。这个时候,如果玩家生成方法为”随机“(Radom),那么就会在几个出生点之间随机选择一个点生成玩家预制件,如果选择轮循机制,那么就会按顺序在每个点生成玩家。

最下面有个列表(Registered Spawnable Prefab),他是用来放游戏中需要孵化的物体的,比如说enemy(敌人),bullet(子弹)啊,都给它拖进去,这里给大家看一下发射子弹的代码:

mirror unity,unity,unity,c#

using UnityEngine;
using Mirror;
public class Playercode : NetworkBehaviour {

    public GameObject bullutprefab;//子弹预制件

    [Command]//客户端同步
	void CmdFire()//函数名要以Cmd开头,注意大小写
    {
		GameObject bullut = Instantiate(bullutprefab, transform.position, this.cam.transform.rotation);//生成子弹
		bullut.transform.Translate(1, 0, 0);//防止子弹撞到角色
		GameObject.Destroy(bullut, 2.0f);//两秒后删除
		bullut.GetComponent<Rigidbody>().velocity = this.cam.transform.forward * 40;//施加力
		NetworkServer.Spawn(bullut);//服务器孵化,同步客户端
    }

}

组件2:NetworkManagerHUD(需要配合Network Manager组件)

他会自动绘制一个GUI:

mirror unity,unity,unity,c#

 Host(主机):相当于又是服务器又是客户端。

Client:连接服务端,后面是服务端IP地址,localhost为本地端口,相当于自己连接自己。

Server Only:只当服务端。

但是,这个UI界面不(Guo)太(Yu)好(Chou)看(Lou),所以我们一般不用这个组件,都会自己制作GUI。

组件3:NetworkIdentity

一般游戏内除了包含network manager组件的物体都要挂在此组件,包括即将孵化的。这玩意儿只有俩选项,一个勾选框Server Only,意思是只有服务端能操作,大家根据自己的需要勾选。第二个是visible,里面有三个选项:默认(Default)、强制隐藏(Force Hidden)、强制显示(ForceShown),个人感觉没啥用,大家默认就行。

组件4:network discovery&network discoveryHUD

这个network discovery组件也需要配合network manager使用,他可以列出局域网内所有的服务器,其中有个transport栏,我们需要把与network manager组件在一起的Kcp transport组件拖进去,不然无法运行。

network discoveryHUD,与networkmanagerHUD差不多,唯独少了一个Client,多了一个find server

mirror unity,unity,unity,c#

作用是点击find server就会 把局域网内的所有比赛(服务器)列出来,但仅限局域网。

更多进阶用法:Network Discovery - Mirror (gitbook.io) 

手册里啥都有。


错误注意:

1,场景内所有挂在了你的代码的物体都会默认添加network identity,但network manager组件与network identity组件放在一个物体上会报错

mirror unity,unity,unity,c#

2.如果物体内有network manager组件但是没有Kcp transport组件,会报错。

3.如果场景内有多个network manager组件,会报错。

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

5.角色代码必须有if (!isLocalPlayer) return;否则。。。后果自己知道。

最后,对手册内容的一点修改:

如果我们想在进入游戏前设置好player的各种信息,比如说name,那么我们得自己编一个network manager。

using Mirror;
using UnityEngine;
using UnityEngine.UI;

public class createplayer : NetworkManager//继承network manager类
{
    public InputField myname;
    public override void OnStartServer()
    {
        base.OnStartServer();

        NetworkServer.RegisterHandler<CreateMMOCharacterMessage>(OnCreateCharacter);
    }
    public struct CreateMMOCharacterMessage : NetworkMessage
    {
        public string playername;
    }
    public override void OnClientConnect()
    {
        base.OnClientConnect();

        // 你可以在这里发送消息,或者你想要的任何其他地方
        CreateMMOCharacterMessage characterMessage = new CreateMMOCharacterMessage
        {
            playername = myname.text
        };

        NetworkClient.Send(characterMessage);
    }

    void OnCreateCharacter(NetworkConnectionToClient//官方手册里会报错,要改成这样 conn, CreateMMOCharacterMessage message)
    {
        // PlayerPrefab是在Network Manager的 inspector 中指定的,
        // 但您可以在每个比赛中使用不同的预制件,例如
        GameObject gameobject = Instantiate(playerPrefab);

        // 应用消息中的数据,但要适合您的游戏。
        //这里的playercode是作者游戏里player的主代码
        Playercode player = gameobject.GetComponent<Playercode>();
        player.playername = message.playername;//playername是作者在自己代码里定义的

        // 调用它以将此游戏对象用作主控制器
        NetworkServer.AddPlayerForConnection(conn, gameobject);
    }
}

今天就这样了,肝了四千多字,后面我还会出更多教程,如果我的博文有地方要修改或者你还有什么疑问可以私信我。

end..文章来源地址https://www.toymoban.com/news/detail-782512.html

到了这里,关于unity多人联机(Mirror插件)有史以来最全的基础教程(附加报错提示和官方手册修改)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

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

    2024年02月06日
    浏览(66)
  • Unity多人联机的实现

    实现多人联机的方法有几种,具体取决于你的具体需求。以下是一些选项: Unity Multiplayer:Unity有自己的内置网络解决方案,称为Unity Multiplayer(以前称为UNET)。这允许您创建可以在互联网或本地网络上玩的多人游戏。您可以在官方Unity文档中找到有关Unity Multiplayer的更多信息

    2024年02月11日
    浏览(56)
  • 在Unity中使用Photon(网络多人联机)

    photon官网地址

    2024年02月04日
    浏览(42)
  • unity使用PhotonEngine实现多人联机游戏开发(一)

    先来了解一下PhotonEngine(光子引擎),这是德国ExitGame公司开发的网络引擎,photonengine简单易上手,很多游戏公司开发的网络游戏都是使用的这个。这个网络引擎里面包括了PhotonCloud(光子云)、photonServer(光子服务器)、PhotonQuantum(确定性量子引擎)、PhotonVoice(光子语音)

    2024年02月07日
    浏览(56)
  • unity多人同步联机——玩家位置(Netcode for GameObjects)

    unity同步基础S/C    安装上述插件 新建空组件添加NetworkManager,设定希望生成物体的预设体   仅需为一个player绑定唯一id,其下所有组件共享一个id 为其添加NetworkRigidbody和Transform(传递需要同步的属性)组件 同时开启多个窗口,会出现多个角色,但是所有角色会共同移动 因

    2024年02月10日
    浏览(46)
  • Unity Netcode for GameObjects多人联机(源文件)

    一、安装Netcode for Gameobjects Netcode for Gameobjects是Unity新推出的联机解决方案,该解决方案目前处于初期,相关功能不是很完善,但是用起来还不错。下面介绍一下相关用法。 首先下载安装Netcode for Gameobjects,其官方网站为Netcode for Gameobjects,安装方式也很简单,新建好Unity项目

    2024年02月03日
    浏览(64)
  • Unity之NetCode多人网络游戏联机对战教程(1)

    官网链接:https://docs-multiplayer.unity3d.com/netcode/current/about/ Netcode for GameObjects(NGO)是专为Unity构建的高级网络库。它能够在网络会话中将 GameObject 和 世界数据 同时发送给多名玩家。使用NGO不必关心低级协议和网络框架。 打开一个unity项目,在菜单栏中选择 Window Package Manager

    2024年02月07日
    浏览(58)
  • Unity之NetCode多人网络游戏联机对战教程(4)--连接申请ConnectionApproval

    没看过前面的教程请先阅读前面的教程,本期将会讲到Netcode联机的申请,当一个Client想连接进来,应向Server发送申请联机的信息,然后由服务端向客户端下发数据,所有数据应该在服务端,而不是在客户端。 举几个常见的例子需要用到 ConnectionApproval 的场景 使用密码加入房

    2024年02月03日
    浏览(60)
  • 【Unity Photon Fusion 2】多人联网插件,主机模式基础教程

            Fusion是Unity的一個新的高性能狀態同步網路庫。Fusion在組建時考慮到了簡化性,可以自然地集成到普通的Unity工作流程中,同時也提供了先進的功能,如資料壓縮、客戶端預測和開箱即用的延遲補償。         本質上,Fusion依靠最先進的壓縮演算法,以最小的

    2024年04月15日
    浏览(48)
  • 【Unity Photon Fusion 2】多人联网插件,共享模式基础教程

    见主机模式基础教程 【Unity Photon Fusion 2】多人联网插件,主机模式基础教程-CSDN博客 概述 该部分解释了如何设置一个简单的场景以及如何创建一个玩家预制件。在本节结束时,您将拥有一个工作的网络场景,为每个连接的客户端生成一个播放器对象。 2.1.1 设置场景 从一个空

    2024年04月27日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包