private void SaveViewConfig(ViewRefData viewRefData) { if (viewRefData == null) { return; } string configPath = Path.Combine(CONFIG_ROOT, viewRefData.name + ".json"); var json = LitJson.JsonMapper.ToJson(viewRefData, true); File.WriteAllText(configPath, json); }
private void GenerateCSharpViewCode(ViewRefData viewRefData, Transform prefabRoot) { if (viewRefData == null) { return; } var memberWriter = new StringBuilder(); memberWriter.Append("\r\n"); memberWriter.AppendFormat(" public const string NAME = \"{0}\";\r\n\r\n", prefabRoot.name); foreach (var comInfo in viewRefData.components.Values) { memberWriter.AppendFormat(" private {0} _{1};\r\n", comInfo.fulleTypeName, comInfo.member); if (comInfo.comType == "GameObject") { memberWriter.AppendFormat( @" public {0} {1} {{ get {{ return _{1} ?? (_{1} = root.Find(""{2}"").gameObject); }} }} ", comInfo.comType, comInfo.member, comInfo.path); } else if (comInfo.comType == "Transform") { memberWriter.AppendFormat( @" public {0} {1} {{ get {{ return _{1} ?? (_{1} = root.Find(""{2}"")); }} }} ", comInfo.comType, comInfo.member, comInfo.path); } else { memberWriter.AppendFormat( @" public {0} {1} {{ get {{ return _{1} ?? (_{1} = root.Find(""{2}"").GetComponent<{0}>()); }} }} ", comInfo.fulleTypeName, comInfo.member, comInfo.path); } memberWriter.Append("\r\n"); } var codeWriter = new StringBuilder(CS_CODE_TEMPLATE); codeWriter.Replace("<className>", viewRefData.name); codeWriter.Replace("<member>", memberWriter.ToString()); SaveViewConfig(viewRefData); File.WriteAllText(Path.Combine(CS_CODE_ROOT, viewRefData.name + ".cs"), codeWriter.ToString()); this.ShowNotification(new GUIContent("生成ViewCode成功!")); }
private void LoadViewConfig(GameObject prefab) { string viewName = prefab.name; if (_generatorSetttings.remap.ContainsKey(viewName)) { viewName = _generatorSetttings.remap[viewName]; } string configPath = Path.Combine(CONFIG_ROOT, viewName + ".json"); if (File.Exists(configPath)) { var rawText = File.ReadAllText(configPath); var viewConfig = LitJson.JsonMapper.ToObject <ViewRefData>(rawText); _viewRefData = viewConfig ?? new ViewRefData(viewName); } else { _viewRefData = new ViewRefData(viewName); } }
private void GenerateViewLuaCode(ViewRefData viewRefData, Transform prefabRoot) { if (viewRefData == null) { return; } var nameSpaceSet = new HashSet <string>(); var refWriter = new StringBuilder(); foreach (var comInfo in viewRefData.components) { //兼容处理,以前旧的ViewConfig没有保存type.FullName string typeName = string.IsNullOrEmpty(comInfo.fulleTypeName) ? comInfo.comType : comInfo.fulleTypeName; if (!nameSpaceSet.Contains(typeName)) { nameSpaceSet.Add(typeName); refWriter.AppendFormat("local {0} = CS.{1}\n", comInfo.comType, typeName); } } var memberWriter = new StringBuilder(); foreach (var comInfo in viewRefData.components) { string className = viewRefData.name; string getterName = comInfo.GetGetterName(); if (comInfo.comType == "GameObject") { memberWriter.AppendFormat(@"function {0}:{1}() return self.root:Find('{2}').gameObject end", className, getterName, comInfo.path); } else if (comInfo.comType == "Transform" || comInfo.comType == "RectTransform") { memberWriter.AppendFormat(@"function {0}:{1}() return self.root:Find('{2}') end", className, getterName, comInfo.path); } else { if (string.IsNullOrEmpty(comInfo.path)) { memberWriter.AppendFormat(@"function {0}:{1}() return self.root:GetComponent(typeof({2})) end", className, getterName, comInfo.comType); } else { memberWriter.AppendFormat(@"function {0}:{1}() return self.root:Find('{2}'):GetComponent(typeof({3})) end", className, getterName, comInfo.path, comInfo.comType); } } memberWriter.Append("\n\n"); } var codeWriter = new StringBuilder(LUA_CODE_TEMPLATE); codeWriter.Replace("<localRef>", refWriter.ToString()); codeWriter.Replace("<className>", viewRefData.name); codeWriter.Replace("<member>", memberWriter.ToString()); SaveViewConfig(viewRefData); File.WriteAllText(Path.Combine(LUA_CODE_ROOT, viewRefData.GetFileName()), codeWriter.ToString()); this.ShowNotification(new GUIContent("生成ViewCode成功!")); AssetDatabase.Refresh(); }
private void CleanUp() { _prefabRoot = null; _viewRefData = null; _curComInfo = null; }