我正在网络中制作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进行尝试,但是后来我遇到了新玩家加入服务器的问题。他们看不到已经生成的枪支的最新位置。
我希望有人能帮助我。