예제 #1
0
    ////从文件初始化关卡信息(Level)
    //private void InitLevelModel(ref Dictionary<string, LevelModel> _levelModel, string _path)
    //{
    //    if (_levelModel == null)
    //    {
    //        _levelModel = new Dictionary<int, LevelModel>();
    //    }
    //    RDFileStream.ReadLevelTable(ref _levelModel, _path);
    //}

    //从CSV表初始化Dictionary
    private static Dictionary <string, T> LoadCsvData <T>(string _fileName)
    {
        Dictionary <string, T> dic = new Dictionary <string, T>();

        /* 从CSV文件读取数据 */
        Dictionary <string, Dictionary <string, string> > result = RDFileStream.ReadCsvFile(_fileName);

        /* 遍历每一行数据 */
        foreach (string name in result.Keys)
        {
            /* CSV的一行数据 */
            Dictionary <string, string> datas = result[name];

            /* 读取Csv数据对象的属性 */
            PropertyInfo[] props = typeof(T).GetProperties();
            /* 使用反射,将CSV文件的数据赋值给CSV数据对象的相应字段,要求CSV文件的字段名和CSV数据对象的字段名完全相同 */
            T obj = Activator.CreateInstance <T>();
            foreach (PropertyInfo p in props)
            {
                ReflectUtil.PiSetValue <T>(datas[p.Name], p, obj);
            }

            /* 按name-数据的形式存储 */
            dic[name] = obj;
        }

        return(dic);
    }
예제 #2
0
    //从level文件读取Level
    public void LoadLevel(string _levelName)
    {
        LevelInfo level = RDFileStream.ReadLevelFile(_levelName);

        if (!level.IsEmpty())
        {
            nowLevelName = level.name;
            levelNameInputField.GetComponent <InputField>().text = level.name;
            makerNameInputField.GetComponent <InputField>().text = level.producer;
            foreach (TileInfo tile in level.tiles)
            {
                GameObject obj = Instantiate(tilePrefabs[tile.name], tile.position, tile.rotation);
                if (obj.GetComponent <Collider2D>())
                {
                    obj.GetComponent <Collider2D>().enabled = false;
                }
                if (obj.GetComponent <ILevelEditor>() != null)
                {
                    obj.GetComponent <ILevelEditor>().Sleep();
                }
                obj.transform.localScale = tile.scale;
                obj.transform.SetParent(GetLayerObject(tile.layer).transform);
                tile.tileObjcet = obj;
                //int width = obj.GetComponent<PublicProperties>().width;
                //int height = obj.GetComponent<PublicProperties>().height;
                //Vector3 pos = GetTileBottomLetfPosition(obj, width, height);

                SetTileInfo(tile.position, tile.name, obj, tile.layer);
            }
        }
    }
예제 #3
0
    //加载TilePrefabs
    void InitTilePrefabs()
    {
        Dictionary <string, AssetBundle> assest = RDFileStream.ReadAllAssestBudle();

        foreach (string key in PublicDataManager.instance.GetSceneTileModelKeys())
        {
            string     levelType = PublicDataManager.instance.GetSceneTileLevelType(key);
            GameObject prefab    = assest[levelType].LoadAsset <GameObject>(PublicDataManager.instance.GetSceneTileName(key));
            tilePrefabs.Add(key, prefab);
        }
    }
예제 #4
0
    /*读写Level*/

    //保存地图
    public void SaveLevel()
    {
        nowLevelName = levelNameInputField.text;
        if (nowLevelName == string.Empty)
        {
            //请输入关卡名
            return;
        }
        nowMakerName = makerNameInputField.text;
        if (nowMakerName == string.Empty)
        {
            //请输入制作者名
            return;
        }
        LevelInfo level = new LevelInfo();

        level.name     = nowLevelName;
        level.name     = nowLevelName;
        level.producer = nowMakerName;

        foreach (int key in tileInfos.Keys)
        {
            foreach (TileInfo tile in tileInfos[key])
            {
                if (!tile.isEmpty)
                {
                    level.tiles.Add(tile);
                }
            }
        }

        RDFileStream.WriteLevelFile(level);
        //存取封面

        //写入CSV
    }
예제 #5
0
    // Use this for initialization
    static void CreatPrefabAndBuildAssetBundles()
    {
        List <AssetBundleBuild> assestBuildMap     = new List <AssetBundleBuild>(); //AssetBundel Map
        List <string>           assestPathList     = new List <string>();           //Assest路径+文件名
        List <SceneTileModel>   sceneTileModelList = new List <SceneTileModel>();
        int        lastId = RDFileStream.ReadCsvFile("SceneTile.csv").Count;
        GameObject root   = GameObject.Find("Root");

        foreach (Transform levelTheme in root.transform)
        {
            //清空上一场景AssestPath
            assestPathList.Clear();
            AssetBundleBuild assetBundle = new AssetBundleBuild();
            //以关卡类型命名
            assetBundle.assetBundleName = levelTheme.name + ".package";

            if (levelTheme.gameObject.activeSelf)
            {
                //路径:Assets/Prefabs/Scene/关卡类型名/prefab名.prefab
                string prefabPath = "Assets/Prefabs/Scene/" + levelTheme.name + "/";
                if (!Directory.Exists(prefabPath))
                {
                    Directory.CreateDirectory(prefabPath);
                }
                foreach (Transform tile in levelTheme)
                {
                    if (tile.gameObject.activeSelf)
                    {
                        string prefabFullPath = prefabPath + tile.name + ".prefab";
                        //创建prefab
                        Object prefab = PrefabUtility.CreatePrefab(prefabFullPath, tile.gameObject);
                        PrefabUtility.ReplacePrefab(tile.gameObject, prefab, ReplacePrefabOptions.ConnectToPrefab);
                        //增加到assestPath
                        assestPathList.Add(prefabFullPath);
                        //创建CSV表-行
                        SceneTileModel row = new SceneTileModel();
                        row.name      = tile.name;
                        row.type      = tile.gameObject.isStatic ? 1 : 2;
                        row.levelType = levelTheme.name;
                        sceneTileModelList.Add(row);
                    }
                }

                assetBundle.assetNames = assestPathList.ToArray();
                if (assetBundle.assetNames.Length > 0)
                {
                    assestBuildMap.Add(assetBundle);
                }
            }
        }
        if (sceneTileModelList.Count > 0)
        {
            RDFileStream.WriteCsvFile("SceneTile.csv", sceneTileModelList.ToArray());
            sceneTileModelList.Clear();
        }
        if (assestBuildMap.Count > 0)
        {
            //AssestBundle路径:StreamingAssets/AssestBundles
            BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath + "/AssestBundles", assestBuildMap.ToArray(), BuildAssetBundleOptions.None, RDPlatform.isOSXEditor ? BuildTarget.StandaloneOSX : BuildTarget.StandaloneWindows);
            Debug.Log("Success");
        }
    }