// 解析 Xml public void parseXml() { clear(); string path = ExportUtil.getDataPath("Res/Config/Tool/ExportSkelAnimatorController.xml"); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(path); XmlNode rootNode = xmlDoc.SelectSingleNode("Root"); XmlNodeList controllerNodeList = rootNode.SelectNodes("Controller"); XmlElement controllerElem; XmlAnimatorController controller; foreach (XmlNode controllerNode in controllerNodeList) { controllerElem = (XmlElement)controllerNode; controller = new XmlAnimatorController(); //m_curXmlAnimatorController = controller; m_controllerList.Add(controller); controller.parseXml(controllerElem); } XmlNodeList pathNodeList = rootNode.SelectNodes("Path"); XmlElement pathElem = null; XmlPath xmlPath = null; foreach (XmlNode pathNode in pathNodeList) { pathElem = (XmlElement)pathNode; xmlPath = new XmlPath(); m_xmlPathList.Add(xmlPath); xmlPath.parseXml(pathElem); } }
// 暂时就支持一层,只支持一个参数 public static AnimatorController BuildAnimationController(XmlAnimatorController controllerData) { // 创建动画控制器 AnimatorController animatorController = AnimatorController.CreateAnimatorControllerAtPath(controllerData.controllerFullPath); controllerData.animatorController = animatorController; // 设置控制器参数 int paramsIdx = 0; foreach (var param in controllerData.getParams.paramList) { animatorController.AddParameter(param.name, param.type); param.animatorControllerParameter = animatorController.parameters[paramsIdx]; ++paramsIdx; } //AnimatorControllerParameter[] parameters = animatorController.parameters; //controllerData.getParams.parameters = parameters; // 创建层,默认会创建一个 Layer,名字是 BaseLayer,其它的 Layer 需要自己创建 AnimatorControllerLayer layer = null; int layerIdx = 0; for (; layerIdx < controllerData.layers.layerList.Count; ++layerIdx) { // 获取当前层 if (layerIdx < animatorController.layers.Length) // 如果 Layer 已经有了,第一层默认创建的,不用自己创建 { layer = animatorController.layers[layerIdx]; } else // 除第一层外,需要自己创建,创建层的时候,会默认创建当前层的主状态机 { animatorController.AddLayer(controllerData.layers.layerList[layerIdx].name); layer = animatorController.layers[layerIdx]; } layer.name = controllerData.layers.layerList[layerIdx].name; // 设置名字 controllerData.layers.layerList[layerIdx].animatorControllerLayer = layer; BuildAnimationStateLayer(controllerData.layers.layerList[layerIdx]); //BuildStateMachineTransition(controllerData.layers.layerList[layerIdx]); } AssetDatabase.SaveAssets(); return(animatorController); }
protected void onFindOneFile(string fullPath) { string ext = ExportUtil.getFileExt(fullPath); string nameNoExt = ExportUtil.getFileNameNoExt(fullPath); XmlAnimatorController controller = null; if (ExportUtil.FBX == ext) { if (!nameNoExt.Contains(ExportUtil.AT)) // 如果包含 @ ,就说明是一个动画 { m_xmlTmp.SetAttribute("outname", nameNoExt); controller = new XmlAnimatorController(); ExportAnimatorControllerSys.m_instance.controllerList.Add(controller); controller.parseXml(m_xmlTmp); // 调整完整的文件名字 controller.adjustFileName(nameNoExt); } } }
protected void onFindOneFile(string fullPath, string name) { string ext = UtilPath.getFileExt(fullPath); string nameNoExt = UtilPath.getFileNameNoExt(fullPath); XmlAnimatorController controller = null; if (ExportUtil.FBX == ext) { if (!nameNoExt.Contains(ExportUtil.AT)) // 如果包含 @ ,就说明是一个动画 { m_xmlTmp.SetAttribute("outname", nameNoExt); controller = new XmlAnimatorController(); ExportAnimatorControllerSys.m_instance.controllerList.Add(controller); controller.parseXml(m_xmlTmp); // 调整完整的文件名字 controller.adjustFileName(nameNoExt); } } }