栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

Unity 使用Mirror制作联机游戏

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity 使用Mirror制作联机游戏

下载Mirror

Mirror | Network | Unity Asset Store

创建网络管理器

创建一个空对象,命名为NetworkManager

给它添加

两个组件 

下面这个也能用

把场景拖拽进NetworkManager的Scene Management

 创建一个空对象,命名为出生点

给其挂载NetworkStartPosition组件

 

将角色拖入Prefabs文件夹,然后删除场景中的角色

打开角色预制体,给它添加Network Transform组件,来同步角色的位置信息

赋予其客户端的权限

 

随后为Player添加控制脚本

注意,这里脚本不继承MonoBehaviour,而是NetworkBehaviour

需要为脚本指定角色的第一人称视角摄像机

默认隐藏,然后在角色生成时启用

如果不隐藏,每加入一个玩家,每个人各自的场景中就会多一个摄像机,那么在该服务器上运行的所有客户端,其视角均会变成最新加入玩家的视角。

如果隐藏了,那么该摄像机只在每个玩家资金的场景中是启用的。
因为我们启用该摄像机,使用的是角色独立的网络版本的Start函数,也就是OnStartLocalPlayer

这样就保证了每一个玩家的视角都是他自己的视角,而不是别人的

在Update函数中,我们加入一条判断本地玩家的语句

如果isLocalPlayer为假,则不移动

这样就保证了玩家的操作,只会对自己,也就是本地的角色产生作用

而不会同时对其他玩家产生影响

using UnityEngine;
using Mirror;

public class PlayerControl : NetworkBehaviour //MonoBehaviour --> NetworkBehaviour
{
    //摄像机
    public GameObject playerCamera;
    
    //速度:每秒移动5个单位长度
    public float moveSpeed = 6;
    //角速度:每秒旋转135度
    public float angularSpeed = 135;

    void FixedUpdate()
    {
        if (!isLocalPlayer) return;
        Move();
    }
 
    void Move()
    {
        //通过键盘获取竖直、水平轴的值,范围在-1到1
        float v = Input.GetAxis("Vertical");
        float h = Input.GetAxis("Horizontal");

        //按照矢量移动一段距离
        transform.Translate(Vector3.forward * v * Time.deltaTime * moveSpeed);
        transform.Translate(Vector3.right * h * Time.deltaTime * moveSpeed);
    }

    public override void OnStartLocalPlayer()
    {
        playerCamera.SetActive(true);
    }
}

随后,把Player预制体拖入NetworkManager中

并设置生成方式为 Round Robin(轮询调度)

然后我们进行发布测试

一个App作为Host

另一个作为Client

 

测试结果正常:

在各自的游戏界面中,均能正确显示各自的视角,可以正常移动,并且能够看到对方的移动。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901230.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号