Unet可生成对象在客户端延迟

时间:2018-10-26 01:01:38

标签: unity3d client-server multiplayer game-development unity3d-unet

我正在网络中制作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组件:

Player prefab

Gun Prefab

我试图寻找解决方案几天。

我什至没有在枪上使用NetworkTransform进行尝试,但是后来我遇到了新玩家加入服务器的问题。他们看不到已经生成的枪支的最新位置。

我希望有人能帮助我。

0 个答案:

没有答案