【问题标题】:Syncronize player position in unity (Mirror)统一同步玩家位置(镜像)
【发布时间】:2021-08-24 18:09:46
【问题描述】:

目标:在使用 Mirror Networking API 的 Unity 多人游戏中同步玩家位置

问题:

  1. 使用 NetworkTransform 组件,位置似乎没有精确同步,客户端和服务器都看到玩家在错误的位置,玩家往往会无缘无故地飞

  2. 我尝试制作一个单独的脚本:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Mirror;

public class PlayerSyncronization : NetworkBehaviour
{
    [SyncVar]
    public Vector3 syncPosition;
    [SyncVar]
    public Quaternion syncRotation;

    public float lerpRate = 15;

    private void FixedUpdate()
    {
        TransmitPosition();
        Lerp();
    }
    void Lerp()
    {
        if (!hasAuthority) return;
        transform.position = Vector3.Lerp(transform.position, syncPosition, Time.deltaTime * lerpRate);
        transform.rotation = Quaternion.Lerp(transform.rotation, syncRotation, Time.deltaTime * lerpRate);
    }

    [ClientCallback]
    void TransmitPosition()
    {
        CmdProvidePositionToServer(transform.position, transform.rotation);
    }

    [Command]
    void CmdProvidePositionToServer(Vector3 pos, Quaternion rot)
    {
        syncPosition = pos;
        syncRotation = rot;
    }
}

但是网络变换组件的结果是一样的,即使玩家停止行走,在另一边他也会继续行走直到他从地图上掉下来

这些是我使用脚本得到的错误/警告

信息:

  • 玩家移动是客户端,因为我使用的是根动作。
  • 我无法使用 IsLocalPlayer,因为它仅在播放器由 NetworkManger 直接生成并且我的播放器由单独的脚本生成时才有效。
  • 现在,即使我不使用它,我的 PlayerPrefab 中也有一个 CharacterController
  • 我正在使用 Steamworks 让玩家通过互联网连接

如果需要更多信息,请告诉我。

【问题讨论】:

  • 您还应该在TransmitPosition 中检查if(!hasAuthority) return; .. 和Lerp 我很确定您会想反过来检查if(hasAuthority) return;,因为在那如果你想发送不接收
  • 另外,CharacterControllerRigidbody 一样是基于物理的,并且应该与通过Transform 直接移动某物混为一谈它可能 a) 破坏任何基于物理的行为和碰撞检测 b) 可能会干扰您的网络(即使在一个客户端上停止,对象也会继续移动 -> 听起来速度是由角色控制器保持的)
  • @derHugo 谢谢,我知道问题出在角色控制器上,所以我检查了玩家是否有权限,如果没有我就销毁它,如果我在服务器上销毁它,我就替换它没有物理的普通对撞机

标签: c# unity3d networking mirror unity3d-unet


【解决方案1】:

我知道问题出在我使用的角色控制器上,所以在播放器脚本中我检查了播放器是否有权限,如果没有,我销毁角色控制器,如果我在服务器上销毁它,我将其替换为没有物理的普通对撞机,所以我仍然可以进行碰撞

【讨论】:

    猜你喜欢
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多