/// <summary> /// 初始战斗地图上的单位 /// </summary> /// <param name="encounterID">遭遇id</param> private void InitAndInstantiateGameUnit(string encounterID) { JsonData data = encounter.GetEncounterDataByID(encounterID); if (data == null) { return; } JsonData unitData = data["UnitMessage"]; int unitDataCount = unitData.Count; OwnerEnum owner; GameObject _object; for (int i = 0; i < unitDataCount; i++) { int x = (int)unitData[i]["Pos_X"]; int y = (int)unitData[i]["Pos_Y"]; //单位控制者:0为玩家,1为敌方AI_1,2为敌方AI_2,... switch (unitData[i]["UnitControler"].ToString()) { case ("0"): owner = OwnerEnum.Player; break; case ("1"): owner = OwnerEnum.Enemy; break; default: owner = OwnerEnum.Enemy; break; } //从对象池获取单位 _object = GameUnitPool.Instance().GetInst(unitData[i]["UnitID"].ToString(), owner); Unit unit = _object.GetComponent <Unit>(); //修改单位对象的父级为地图方块 _mapBlocks[x, y].AddUnit(unit); // _object.transform.SetParent(_mapBlocks[x, y].transform); //_object.transform.localPosition = Vector3.zero; _unitsList.Add(unit); unit.mapBlockBelow = _mapBlocks[x, y]; AI.SingleController controller; //初始化AI控制器与携带的仇恨列表 if (_unitsList.Count == 0 || _unitsList.Count == 3 || _unitsList.Count == 5) { controller = new AI.SingleAutoControllerAtker(unit); //无脑型 } else { controller = new AI.SingleAutoControllerDefender(unit);//防守型 } controller.hatredRecorder.Reset(unit); GamePlay.Gameplay.Instance().autoController.singleControllers.Add(controller); //TODO 血量显示 test版本, 此后用slider显示 var TextHp = _object.transform.GetComponentInChildren <Text>(); var gameUnit = _object.GetComponent <GameUnit.GameUnit>(); float hp = gameUnit.hp /* - Random.Range(2, 6)*/; float maxHp = gameUnit.MaxHP; float hpDivMaxHp = hp / maxHp * 100; TextHp.text = string.Format("Hp: {0}%", hpDivMaxHp); } }
public string InitialMapDataPath = "/Scripts/BattleMap/eg1.json";//待删除 private void InitAndInstantiateMapBlocks1() { JsonData mapData = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + InitialMapDataPath)); int mapDataCount = mapData.Count; this.columns = (int)mapData[mapDataCount - 1]["y"] + 1; this.rows = (int)mapData[mapDataCount - 1]["x"] + 1; _mapBlocks = new BattleMapBlock[rows, columns]; GameObject instance = new GameObject(); int x = 0; int y = 0; int area = 0; battleArea.GetAreas(mapData); for (int i = 0; i < mapDataCount; i++) { x = (int)mapData[i]["x"]; y = (int)mapData[i]["y"]; area = (int)mapData[i]["area"]; Vector2 mapPos = new Vector2(x, y); battleArea.StoreBattleArea(area, mapPos); //实例化地图块 instance = GameObject.Instantiate(normalMapBlocks, new Vector3(x, y, 0f), Quaternion.identity); instance.transform.SetParent(_tilesHolder); instance.gameObject.AddComponent <BattleMapBlock>(); //初始化mapBlock成员 _mapBlocks[x, y] = instance.gameObject.GetComponent <BattleMapBlock>(); _mapBlocks[x, y].area = area; _mapBlocks[x, y].x = x; _mapBlocks[x, y].y = y; _mapBlocks[x, y].blockType = EMapBlockType.normal; //初始化地图块儿的collider组件 _mapBlocks[x, y].bmbCollider.init(_mapBlocks[x, y]); GamePlay.Gameplay.Instance().bmbColliderManager.InitBMB(_mapBlocks[x, y].bmbCollider); int tokenCount = mapData[i]["token"].Count; if (tokenCount == 1) { Unit unit = InitAndInstantiateGameUnit(mapData[i]["token"][0], x, y); unit.mapBlockBelow = _mapBlocks[x, y]; unit.gameObject.GetComponent <GameUnit.GameUnit>().owner = GameUnit.OwnerEnum.Enemy; _unitsList.Add(unit); _mapBlocks[x, y].AddUnit(unit); AI.SingleController controller; //初始化AI控制器与携带的仇恨列表 if (_unitsList.Count == 3 || _unitsList.Count == 5 || _unitsList.Count == 6) { controller = new AI.SingleAutoControllerAtker(unit); //无脑型 } else { controller = new AI.SingleAutoControllerDefender(unit);//防守型 } controller.hatredRecorder.Reset(unit); GamePlay.Gameplay.Instance().autoController.singleControllers.Add(controller); } } }