我的Unity(19)查找替换字体工具

新学到的东西
EditorUtility.DisplayProgressBar (“Hold on”, go.name, (float)(game_list.IndexOf(go)+ 1) / game_list.Count);
EditorUtility.ClearProgressBar ();
出现Unity 进度条

using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.UI;
using System.Text;
using System.Linq;

public class TakeplaceFont : EditorWindow
{
    [MenuItem ("Tools/查找替换字体")]
    public static void SearchTakeplaceFont ()
    {
        GetWindow<TakeplaceFont> ("查找替换字体").Show ();
    }
    private Font targetFont;
    private Font currentFont;

    private bool IsDebugLocal = false;
    private bool IsContainEnmpty = true;
    private string btnName;
    private enum TextType
    {
        Nothing = 0,
        UGUI,
        NGUI
    }
    private TextType textType = TextType.UGUI;

    private bool IsAllChangeFont = true;
    private void OnGUI ()
    {
        EditorGUILayout.LabelField ("功能:将所选择的Prefabs的丢失,默认字体替换成目标字体");
        EditorGUILayout.BeginHorizontal ();
        IsAllChangeFont = EditorGUILayout.Toggle ("字体全部替换",IsAllChangeFont);
        if (!IsAllChangeFont)
        {
            EditorGUILayout.LabelField ("要替换的字体:");
            currentFont = (Font)EditorGUILayout.ObjectField (currentFont, typeof (Font));
        }    
        EditorGUILayout.EndHorizontal ();
        EditorGUILayout.BeginHorizontal ();
        IsContainEnmpty = EditorGUILayout.Toggle ("是否包含Miss的Text", IsContainEnmpty);
        textType = (TextType)EditorGUILayout.EnumPopup ("UGUI或者NGUI", textType);
        EditorGUILayout.EndHorizontal ();
        EditorGUILayout.BeginHorizontal ();
        EditorGUILayout.LabelField ("目标字体");
        targetFont = (Font)EditorGUILayout.ObjectField (targetFont, typeof (Font));
        EditorGUILayout.EndHorizontal ();
        EditorGUILayout.BeginHorizontal ();
        EditorGUILayout.LabelField ("当前选中的物体:");
        EditorGUILayout.EndHorizontal ();
        for (int i = 0; i < Selection.objects.Length; i++)
        {
            EditorGUILayout.ObjectField (Selection.objects[i], typeof (Object));
        }
        EditorGUILayout.BeginHorizontal ();
        if (GUILayout.Button (btnName))
        {
            FindFontAndChange ();
        }
        EditorGUILayout.LabelField ("是否打印修改位置");
        IsDebugLocal = EditorGUILayout.Toggle (IsDebugLocal);
        if (IsDebugLocal)
            btnName = "查找替换";
        else
            btnName = "查找替换并打印";
        EditorGUILayout.EndHorizontal ();
    }

    private void FindFontAndChange ()
    {
        //TODO  包含NGUI和UGUI
        List<GameObject> game_list = Selection.gameObjects.ToList ();
        int count = 0;
        Text[] Text_Arr;
        StringBuilder sb = new StringBuilder ();
        foreach (var go in game_list)
        {
            EditorUtility.DisplayProgressBar ("Hold on", go.name, (float)(game_list.IndexOf(go)+ 1) / game_list.Count);
            Text_Arr = go.GetComponentsInChildren<Text> (true);
            foreach(var item in Text_Arr)
            {
               
                if (IsAllChangeFont)
                {
                    sb.AppendLine (go.name + "/" + item.name + "/" + (item.font==null?"Missing": item.font.name));
                    count++;
                    item.font = targetFont;
                }else
                {
                    if (IsContainEnmpty)
                    {
                        if (item.font == null)
                        {
                            count++;
                            item.font = targetFont;
                            sb.AppendLine (go.name + "/" + item.name + "/" + (item.font == null ? "Missing" : item.font.name));
                        }
                    }
                    if (item.font == currentFont||item.font.name== "Arial")
                    {
                        item.font = targetFont;
                        count++;
                        sb.AppendLine (go.name + "/" + item.name + "/" + (item.font == null ? "Missing" : item.font.name));
                    }
                }              
            }
            EditorUtility.ClearProgressBar ();
        }
        Debug.Log (string.Format("共有{0}处替换完成",count.ToString()));
        Debug.Log (sb.ToString ());
    }
}

效果图
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity NPOI 是一款在 Unity 引擎中可以使用的开源的 Excel 操作插件。关键字替换是指在 Excel 表格中,将一些指定的关键字替换为其他内容或值。 使用 Unity NPOI 进行关键字替换可以帮助开发者在游戏或应用中动态地修改 Excel 表格内容。通过替换关键字,开发者可以实现一些灵活的功能,例如动态修改游戏中的文本,更新角色的属性或任务等。 首先,需要在 Unity 项目中导入和配置 Unity NPOI 插件。然后,通过编写脚本,在 Unity 中读取和操作 Excel 表格。 在进行关键字替换时,我们需要按照以下步骤进行操作: 1. 打开 Excel 表格文件,使用 Unity NPOI 提供的 API 方法读取和解析表格数据。 2. 通过遍历表格的行和列,找到包含需要替换的关键字的单元格。 3. 获取关键字所在的单元格,并获取该单元格中的内容或值。 4. 根据需要替换的规则或逻辑,将关键字替换为指定的内容或值。 5. 将替换后的结果保存回 Excel 表格中。 6. 关闭 Excel 表格文件,释放资源。 Unity NPOI 提供了一系列的 API 方法,可以帮助我们完成这些操作。通过脚本的方式,我们可以将关键字替换过程自动化,并根据游戏或应用的需要进行定制化的操作。 总的来说,Unity NPOI 关键字替换是一种在 Unity 引擎中使用 Excel 表格进行动态内容修改的方法。通过使用该插件,开发者可以实现一些灵活的功能,提升游戏或应用的可扩展性和定制化程度。 ### 回答2: Unity 是一款跨平台的游戏引擎,而 NPOI 是一个用于创建和处理 Microsoft Office 文件(包括 Excel)的库。关键字替换是指在文本(如 Excel 文件)中搜索特定的关键字,并将其替换成新的内容。 在 Unity使用 NPOI 进行关键字替换可以通过以下步骤实现: 1. 首先,确保已经将 NPOI 库引入到 Unity 项目中。可以通过下载 NPOI 的 NuGet 包,然后将其解压,并将相关文件拷贝到 Unity 项目的 Assets 文件夹下。 2. 创建一个用于进行关键字替换的函数。在这个函数中,需要使用 NPOI 的 API 打开 Excel 文件,并读取其中的文本内容。 3. 使用 NPOI 的 API,遍历 Excel 文件中的每个单元格,搜索需要替换的关键字。可以使用类似于 `cell.getStringCellValue()` 的方法获取单元格的文本内容。 4. 如果找到了需要替换的关键字,可以使用类似于 `cell.setCellValue("新内容")` 的方法将其替换成新的内容。 5. 最后,保存修改后的 Excel 文件并关闭文件流。 需要注意的是,使用 NPOI 进行关键字替换需要一定的编程知识和对 NPOI API 的理解。在实际应用中,还需要处理异常情况,如找不到 Excel 文件或关键字等。 总结起来,Unity使用 NPOI 进行关键字替换需要引入 NPOI 库,并编写相应的函数来实现 Excel 文件的读取和替换操作。这样可以方便地在 Unity 项目中实现对 Excel 文件中关键字的替换。 ### 回答3: Unity NPOI是一个用于操作Excel文件的工具。关键字替换是指在Excel文件中查找替换指定的关键字。 在使用Unity NPOI进行关键字替换时,首先需要加载要操作的Excel文件。可以使用Unity NPOI提供的API来打开、读取和修改Excel文件。 接下来,我们需要定义要替换的关键字,可以是单个单词或短语。然后,使用Unity NPOI提供的搜索功能,在Excel文件中查找包含这些关键字的单元格或文本。 在找到需要替换的关键字后,使用Unity NPOI提供的替换功能,将关键字替换为指定的内容。可以将关键字所在的单元格内容完全替换,或者仅替换关键字本身。 最后,保存修改后的Excel文件,可以选择另存为新的文件,或者直接覆盖原始文件。 值得注意的是,使用Unity NPOI进行关键字替换时,需要确保Excel文件的格式正确,并且已经安装了NPOI库。另外,关键字替换功能可以用于批量修改Excel文件中的多个关键字。 总体而言,Unity NPOI提供了一个方便易用的工具,使我们能够轻松地在Excel文件中进行关键字替换操作,极大地提高了我们在Unity开发中处理Excel文件的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值