Exemplo n.º 1
0
    /// <summary>
    /// 导入已经存在的场景
    /// 先导入data/bin/文件夹下的场景数据文件
    /// 然后根据这个数据文件的id依次加载  "Prefabs/Scenes/scn"+sceneIdStr  这个路径下的各个场景文件
    /// </summary>
    /// <param name="id">Identifier.</param>
    void LoadScene(int id)
    {
        Debug.Log(string.Format("开始导入场景{0}数据", id));
        string        sceneInfoPath = Path.GetDirectoryName(Application.dataPath) + "/data/bin/";
        StringBuilder _path         = new StringBuilder();

        _path.Append(sceneInfoPath);
        _path.Append("scn");
        _path.Append(id);
        byte[] bytes = FileHelper.ReadBytesFromFile(_path.ToString());
        //Debug.Log("导入时buffer长度:" + bytes.Length);
        if (null == bytes)
        {
            Debug.LogError(string.Format("error!! 获取地图:{0}失败", _path.ToString()));
            return;
        }

        IoBuffer buffer = new IoBuffer();

        buffer.PutBytes(bytes);

        //场景ID
        byte sceneId = buffer.GetByte();

        sceneIdStr = sceneId.ToString();

        //场景名
        sceneNameStr = buffer.GetString();


        //场景宽
        int mapWidth = buffer.GetInt();

        mapWidthStr = mapWidth.ToString();


        //场景高
        int mapHeight = buffer.GetInt();

        mapHeightStr = mapHeight.ToString();

        _path = null;

        Debug.Log(string.Format("导入场景{0}信息成功", sceneId));

        CleanScene();

        //scnPrefab路径,导出时需要,载入不需要
        //string scnPrefabPath = Application.dataPath+"/Resources/Prefabs/Scenes/scn"+sceneIdStr;

        Debug.Log("开始载入场景" + sceneIdStr + "资源");
        //创建新地图
        GameObject goScene = Instantiate(Resources.Load("Prefabs/Scenes/scn" + sceneIdStr + "/scene")) as GameObject;

        if (null == goScene)
        {
            Debug.LogError("找不到" + "Prefabs/Scenes/scn" + sceneIdStr + "/scene文件 停止终止!!");
            return;
        }
        goScene.name = "scene";

        GameObject goTerrain = Instantiate(Resources.Load("Prefabs/Scenes/scn" + sceneIdStr + "/terrain")) as GameObject;

        if (null == goTerrain)
        {
            Debug.LogError("找不到" + "Prefabs/Scenes/scn" + sceneIdStr + "/terrain文件 停止终止!!");
            return;
        }
        goTerrain.name = "terrain";

        GameObject goLight = Instantiate(Resources.Load("Prefabs/Scenes/scn" + sceneIdStr + "/dlight")) as GameObject;

        if (null == goLight)
        {
            Debug.LogError("找不到" + "Prefabs/Scenes/scn" + sceneIdStr + "/dlight文件 停止终止!!");
            return;
        }
        goLight.name = "dlight";

        GameObject goTree = Instantiate(Resources.Load("Prefabs/Scenes/scn" + sceneIdStr + "/tree")) as GameObject;

        if (null == goTree)
        {
            Debug.LogError("找不到" + "Prefabs/Scenes/scn" + sceneIdStr + "/tree文件 停止终止!!");
            return;
        }
        goTree.name = "tree";

        GameObject goObj = Instantiate(Resources.Load("Prefabs/Scenes/scn" + sceneIdStr + "/obj")) as GameObject;

        if (null == goObj)
        {
            Debug.LogError("找不到" + "Prefabs/Scenes/scn" + sceneIdStr + "/obj文件 停止终止!!");
            return;
        }
        goObj.name = "obj";

        GameObject goAni = Instantiate(Resources.Load("Prefabs/Scenes/scn" + sceneIdStr + "/ani")) as GameObject;

        if (null == goAni)
        {
            Debug.LogError("找不到" + "Prefabs/Scenes/scn" + sceneIdStr + "/ani文件 停止终止!!");
            return;
        }
        goAni.name = "ani";

        GameObject goPartical = Instantiate(Resources.Load("Prefabs/Scenes/scn" + sceneIdStr + "/partical")) as GameObject;

        if (null == goPartical)
        {
            Debug.LogError("找不到" + "Prefabs/Scenes/scn" + sceneIdStr + "/partical文件 停止终止!!");
            return;
        }
        goAni.name      = "ani";
        goPartical.name = "partical";


        //info = "导入地图"+sceneIdStr+"成功";
        Debug.Log(string.Format("导入场景{0}成功", sceneId));
    }