Unity3d:生成网络化RigidBody射弹的服务器延迟

时间:2016-09-15 11:38:05

标签: c# unity3d unity5

我正在关注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);
    }

}

0 个答案:

没有答案