Unity3d Unet多人游戏 - 只有服务器主机可以将建筑物网络识别

时间:2016-11-04 00:54:05

标签: unity3d unity5 multiplayer unity3d-unet

我正在编写一个多人游戏,但我仍然坚持使用构建系统 - 我的意思是我已经创建了一个代码来放置它在主机端完美运行的块(当你在主机上运行这个脚本时,块生成为每个客户端)但它不在客户端工作(块只为本地客户端生成,但不为服务器和其他客户端生成)。 我已经看到很多类似的问题,但今天没有找到答案。也许你们可以帮我一臂之力。 这是我的代码:

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class Builder : NetworkBehaviour {

    public GameObject preview;
    public Transform currentPreview;
    bool isPreviewing = false;
    GameObject buildingPreview;
    private NetworkIdentity networkId;

    // Use this for initialization
    void Start ()
    {
        networkId = GetComponent<NetworkIdentity>();
    }

    // Update is called once per frame

    void ViewPreview()
    {
        buildingPreview = Instantiate(preview, transform.position, transform.rotation) as GameObject;
        currentPreview = buildingPreview.transform;
        isPreviewing = true;
    }
    void Update ()
    {
        CmdBuild(); 
    }

    void CmdBuild()
    {
        if (networkId.isLocalPlayer)
        {

        }
        else
        { return; }
        if (Input.GetKeyDown(KeyCode.E))
        {
            if (!isPreviewing)
                ViewPreview();
            else
            {
                Destroy(buildingPreview);
                isPreviewing = false;
            }
        }
        if (isPreviewing)
        {
            Preview();
        }
    }


    [Command]
    void CmdSpawnBuilding()
    {
        GameObject buildingPlaced = Instantiate(preview, currentPreview.position, currentPreview.rotation) as GameObject;
        NetworkServer.Spawn(buildingPlaced);
    }

    void Preview()
    {
        currentPreview.position = transform.position + transform.forward * 3f;
        currentPreview.rotation = transform.rotation;
        if (Input.GetButtonDown("Fire1"))
        {
            CmdSpawnBuilding();
            isPreviewing = false;
        }
    }
}

P.S:我已经为预制件分配了网络身份脚本我正在创建网络感知,并且我在网络管理器中将该预制件作为注册的Spawnable Prefabs。

0 个答案:

没有答案