Я делаю 2D нисходящий шутер в сети. Я порождаю оружие на позиции игроков. Моя проблема в том, что когда Клиент порождает свой пистолет, у него какая-то задержка. Когда клиент движется, пистолет плохо следит за ним, он появляется в течение 1/4 сек. Он просто «прыгает» к игроку.
Проблема только на стороне клиента, с хостом все в порядке.
Оружие находится в порождаемых компонентах, имеет сетевой идентификатор и полномочия, а также имеет сетевое преобразование. Плеер имеет те же компоненты.
Вот мой код:
public class Player : NetworkBehaviour
{
[SerializeField] float speed = 10f;
[HideInInspector] public GameObject playerGun;
public GameObject gunPrefab;
void Update()
{
Movement();
if (Input.GetKeyDown(KeyCode.I))
{
CmdGetGun();
}
}
private void Movement()
{
Vector3 position = new Vector3(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")).normalized * Time.deltaTime * speed;
transform.position += position;
MouseMovement();
}
private void MouseMovement()
{
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
mousePosition.Normalize();
float rotation_z = Mathf.Atan2(mousePosition.y, mousePosition.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, rotation_z);
}
[Command]
public void CmdGetGun()
{
Debug.Log("SPAWNING A GUN");
GameObject playerGun = (GameObject)Instantiate(gunPrefab, GetComponentInChildren<HandHolder>().transform.position, GetComponentInChildren<HandHolder>().transform.rotation, GetComponentInChildren<HandHolder>().transform);
NetworkServer.Spawn(playerGun);
RpcSetGunOnClients(playerGun);
}
[ClientRpc]
private void RpcSetGunOnClients(GameObject playerGun)
{
this.playerGun = playerGun;
}
Вот компоненты Player и Gun:
Я пытаюсь найти решение в течение нескольких дней.
Я пытался даже без использования NetworkTransform на пистолете, но потом у меня возникла проблема с присоединением новых игроков к серверу. Они не могли видеть обновленную позицию уже порожденных орудий.
Надеюсь, кто-нибудь сможет мне помочь.