繁体   English   中英

Unity 中的镜像网络问题

[英]Problems with Mirror Networking in Unity

我对 Unity 比较陌生,并决定制作一个简单的多人游戏。 在实现多人游戏方面后,出现了两个主要问题。 一,每个加入的人都将拥有他们应该拥有的 n 倍的速度,其中 n 是玩家加入后的玩家数量。 第二,我有一个非常简单的相机脚本,如果相机没有绑定到本地播放器,它会禁用它,如果它是,它会启用它。 但是,这不起作用,因为加入的每个人都无法连接到任何摄像机,并且主机会在摄像机之间快速切换。

这是代码:

using Mirror;
using UnityEngine;

public class PlayerObject : NetworkBehaviour
{

    public GameObject playerPrefab;
    public KeyCode left;
    public KeyCode right;
    public float speed;
    GameObject myPlayerUnit;

    void Start()
    {
        if (isLocalPlayer == false)
        {
            return;
        }

        //Instantiate(playerPrefab);
        CmdSpawn();
        Debug.Log(myPlayerUnit == null);
    }

    void Update()
    {
        FindObjectOfType<Camera>().enabled = false;
        if (isLocalPlayer == false)
        {
            return;
        }
        CmdSetCamera(true);
        if (Input.GetKey(left))
        {
            CmdMove(false);
        }

        if (Input.GetKey(right))
        {
            CmdMove(true);
        }
    }
    [Command]
    void CmdSpawn()
    {
        GameObject go = Instantiate(playerPrefab);
        myPlayerUnit = go;
        NetworkServer.Spawn(go);
    }

    [Command]
    void CmdSetCamera(bool en)
    {
        if (myPlayerUnit != null)
        {
            myPlayerUnit.GetComponent<Camera>().enabled = en;
        }
    }

    [Command]
    void CmdMove(bool right)
    {
        if (myPlayerUnit == null)
        {
            return;
        }

        if (right)
        {
            myPlayerUnit.transform.Translate(speed, 0, 0);
        }
        else
        {
            myPlayerUnit.transform.Translate(-speed, 0, 0);
        }
    }
}

在您花更多时间编辑和尝试修复此代码之前,我会废弃它并尝试一种新的更简单的方法。 您在此处选择的方法的主要问题之一是您通过关闭相机“ FindObjectOfType<Camera>().enabled = false; ”开始每一帧,并且相机启用.禁用和切换是不必要的复杂。

我现在没有时间给出代码示例,但是 Mirror 可以工作,因此更简单的方法会更容易为您调试,并确保在每个部分都包含 Debug.Log 语句,以便您知道每个部分发生了什么步。

对于速度,您似乎是根据播放器单元计算它,并且由于播放器单元相互混淆,正如您对相机所描述的那样,所以您想要做这样的事情

void Start() {
speed = 10f; //you need to define what your speed is or unity will calculate it weirdly
}

对于相机问题,您可能应该在预制件中禁用相机并在玩家加入时启用它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM