private void LoadingProps(MapRootDto mapData) { mapData.Prefabs.ForEach(x => { var o = Instantiate(LoadResourceByIdTool.GetProp(x.PrefabId)); o.transform.SetParent(Props.transform); // 因为原物品可能有坐标 o.transform.position = new Vector3(o.transform.position.x + x.X, o.transform.position.y + x.Y, 0); }); }
/// <summary> /// 地图生成 这里的 IEnumerator 表示这里是协程(不然会导致游戏卡住) /// </summary> /// <returns></returns> private IEnumerator InitData(MapRootDto mapData) { // 先取出图层数据 var layerItems = mapData.Layer; foreach (var layer in layerItems) { // 只加载需要显示的 if (!layer.Show) { continue; } var layerChunks = layer.Chunks; foreach (var chunk in layerChunks) { // 起始位置 var x = chunk.X; var y = chunk.Y; for (var i = 0; i < mapData.ChunkSizeHeight; i++) { for (var j = 0; j < mapData.ChunkSizeWidth; j++) { // 默认 -1 为空 if (chunk.Data[i][j] == -1) { continue; } var tile = orderTiles[chunk.Data[i][j]]; var pos = new Vector3Int(Convert.ToInt32(x + j), Convert.ToInt32(y + i), 0); switch (tile.model) { case DisplayModel.Background: backgroundMap.SetTile(pos, tile); break; case DisplayModel.Crash: crashMap.SetTile(pos, tile); break; case DisplayModel.Foreground: foregroundMap.SetTile(pos, tile); break; default: throw new ArgumentOutOfRangeException(); } } yield return(null); } } } }
/// <summary> /// 装载 Tile /// </summary> /// <param name="mapData"></param> private void LoadingTile(MapRootDto mapData) { var tileInfos = mapData.Tiles; var tiles = new List <CustomTile>(); tileInfos.ForEach(tileInfo => { var tile = ScriptableObject.CreateInstance <CustomTile>(); tile.InitializeMyTileInfo(tileInfo.EffectKeys, tileInfo.TileSpriteId, tileInfo.DisplayModel, tileInfo.Tags); ColorUtility.TryParseHtmlString(tileInfo.Color, out var nowColor); tile.color = nowColor; tiles.Add(tile); }); orderTiles = tiles.ToArray(); }
/// <summary> /// 用于初始化 /// </summary> private void Init() { // 先加载地图数据 var map = GameManager.instance.currentMapData; // 地图数据为空则加载本地资源 mapDto = map ?? LoadJsonTool.ParseLocalMapJsonData(); // 初始化角色信息 pm.speed = mapDto.Initial.Speed; pm.runDivisor = mapDto.Initial.RunDivisor; pm.jumpSleepDivisor = mapDto.Initial.JumpSpeedDivisor; pm.climbSpeed = mapDto.Initial.ClimbSpeed; pm.crouchSpeedDivisor = mapDto.Initial.CrouchSpeedDivisor; pm.jumpForce = mapDto.Initial.JumpForce; pm.jump2ForceDivisor = mapDto.Initial.Jump2ForceDivisor; pm.climbLateralForce = mapDto.Initial.ClimbLateralForce; pm.transform.position = new Vector3Int(mapDto.Initial.X, mapDto.Initial.Y, 1); playerBirth = pm.transform.position; // 设置角色 pm.GetComponent <SpriteRenderer>().color = Color.white; pm.rb.constraints = RigidbodyConstraints2D.FreezeRotation; // 避免歪了 pm.transform.rotation = Quaternion.identity; // 给个向下的力,否则动不了 pm.rb.AddForce(new Vector2(0, -1), ForceMode2D.Impulse); // 开始设置背景信息 buildBackground.StartSetBackground(mapDto); // 初始化格子 buildTileMap.StartCreateMap(mapDto); // 初始化道具 buildMapProp.StartCreateProps(mapDto); }
private CustomTile[] orderTiles; // 全部 Tile,Map 用于读取 public void StartCreateMap(MapRootDto mapData) { ClearMap(); LoadingTile(mapData); StartCoroutine(InitData(mapData)); }
public void StartSetBackground(MapRootDto mapData) { bg.sprite = LoadResourceByIdTool.GetBackgroundSprite(mapData.Background.BgId); ColorUtility.TryParseHtmlString(mapData.Background.Color, out var color); bg.color = color; }
public void StartCreateProps(MapRootDto mapData) { ClearProp(); LoadingProps(mapData); }