我正在关注official multiplayer networking tutorial,但我对“子弹”有些麻烦。
根据播放器预制件上的生成点的位置,通过命令在服务器端生成每个子弹预制件。基本系统运行良好,但对于除主机之外的所有玩家,生成点的位置与衍生的子弹之间存在大量滞后。
根据玩家在服务器上的位置正确生成子弹,如预期的那样。但是,这是玩家客户位置的背后。
有解决方案吗?我应该使用RigidBody吗?我已经看到了使用射线投射射弹的方法,这可能是一种改进,但我希望能够看到射弹穿过空中。任何帮助将非常感谢!
供参考,相关的PlayerController代码:
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
public class PlayerController : NetworkBehaviour {
public float speed;
public float turnSpeed;
public GameObject bulletPrefab;
public Transform bulletSpawn;
void Update () {
if (!isLocalPlayer) {
return;
}
float power = Input.GetAxis ("Vertical") * Time.deltaTime * speed;
float turn = Input.GetAxis ("Horizontal") * Time.deltaTime * turnSpeed;
transform.Rotate(0, turn, 0);
transform.Translate (power, 0, 0);
if (Input.GetKeyDown (KeyCode.Space)) {
CmdFire ();
}
}
[Command]
void CmdFire() {
var bullet = (GameObject)Instantiate (bulletPrefab, bulletSpawn.position, bulletSpawn.rotation);
bullet.GetComponent<Rigidbody>().velocity = bullet.transform.forward * 6;
NetworkServer.Spawn (bullet);
Destroy (bullet, 2.0f);
}
}