簡體   English   中英

統一同步播放器 position(鏡像)

[英]Syncronize player position in unity (Mirror)

目標:在使用鏡像網絡 API 的 Unity 多人游戲中同步玩家 position

問題:

  1. 使用 NetworkTransform 組件 position 似乎沒有精確同步,客戶端和服務器都看到播放器在錯誤的 position 中,玩家傾向於無緣無故飛

  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;
    }
}

但是網絡變換組件的結果是一樣的,即使玩家停止行走,在另一邊他繼續行走直到他從 map

這些是我使用腳本得到的錯誤/警告

信息:

  • 玩家運動是客戶端,因為我使用的是根運動。
  • 我不能使用 IsLocalPlayer,因為它僅在播放器由 NetworkManger 直接生成並且我的播放器由單獨的腳本生成時才有效。
  • 現在,即使我不使用它,我的 PlayerPrefab 中也有一個 CharacterController
  • 我正在使用 Steamworks 讓玩家通過互聯網連接

如果需要更多信息,請告訴我。

我知道問題出在我使用的角色 controller 上,所以在播放器腳本中我檢查了播放器是否有權限,如果沒有,我銷毀角色 controller,如果我在服務器上銷毀它,我用普通對撞機替換它沒有物理,所以我仍然可以有碰撞

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM