private static ActionTarget ParseActionTarget(JsonData json, AbilityData abilityData) { if (json == null) { return(null); } var actionTarget = new ActionTarget(); if (json.IsObject) { var aoeAreaJsonData = GetJsonValue(json, "AoeArea"); if (aoeAreaJsonData == null) { BattleLog.LogError("技能[%s]中Target配置是区域目标配置,但是未配置AoeArea或者配置错误", abilityData.configFileName); return(null); } var targetCenter = GetEnumValue <ActionMultipleTargetsCenter>(json, "Center"); var areaType = GetStringValue(aoeAreaJsonData, "AreaType"); var abilityAreaDamageType = GetEnumValue <AOEType>(areaType); switch (abilityAreaDamageType) { case AOEType.Radius: float radius = (int)GetJsonValue(aoeAreaJsonData, "Radius"); actionTarget.SetRadiusAoe(targetCenter, radius); break; case AOEType.Line: JsonData lineJsonData = (int)GetJsonValue(aoeAreaJsonData, "Line"); if (lineJsonData == null) { BattleLog.LogError("技能[{0}]中Target配置是区域目标配置,但是未配置Line", abilityData.configFileName); return(null); } var length = (float)GetJsonValue(lineJsonData, "Length"); var thickness = (float)GetJsonValue(lineJsonData, "Thickness"); actionTarget.SetLineAoe(targetCenter, length, thickness); break; case AOEType.Sector: JsonData sectorJsonData = GetJsonValue(json, "Sector"); if (sectorJsonData == null) { BattleLog.LogError("技能[{0}]中Target配置是区域目标配置,但是未配置Sector", abilityData.configFileName); return(null); } var sectorRadius = (float)GetJsonValue(sectorJsonData, "Radius"); var angle = (float)GetJsonValue(sectorJsonData, "Angle"); actionTarget.SetSectorAoe(targetCenter, sectorRadius, angle); break; default: break; } var teamJsonData = GetStringValue(json, "Teams"); var abilityTargetTeam = GetEnumValue <MultipleTargetsTeam>(teamJsonData); actionTarget.SetTargetTeam(abilityTargetTeam); } else { var target = (ActionSingTarget)Enum.Parse(typeof(ActionSingTarget), json.ToString()); actionTarget.SetSingTarget(target); } return(actionTarget); }