unity 几个小工具

清理本地游戏数据

[MenuItem ("Game/清理本地游戏数据 %k")]
    private static void CleanData () {
        string[] dataArr = Directory.GetFileSystemEntries (Application.persistentDataPath);
        foreach (string data in dataArr) {
            if (File.Exists (data)) {
                File.Delete (data);
            }
            if (Directory.Exists (data)) {
                Directory.Delete (data);
            }
        }
        PlayerPrefs.DeleteAll ();
        Debug.Log ("清理完成。");
    }

Directory.GetFileSystemEntries(_path):获取路径下所有的文件和文件夹的名称。
PlayerPrefs.DeleteAll():清除PlayerPrefs下所有的数据。

获取gameObject的路径

有时我们在代码中需要获取到gameObject的路径,例如transform.Find("XX/XX/XX/XX/XX/XX");如果层级很多写起来就比较麻烦,而且可能写错,这里的方法可以在Hierarchy窗口里选中gameObject时右键点出窗口来将路径放入剪贴板,在ctrl+v即可。


image.png
//递归调用获取路径 
    private static string GetPath (GameObject go) {
        Transform trans_parent = go.transform.parent;
        if (trans_parent == null) {
            return go.name;
        } else {
            return GetPath (trans_parent.gameObject) + "/" + go.name;
        }
    }

    [MenuItem ("GameObject/GetPath &c", priority = 0)]
    private static void RootPath () {
        GameObject go = Selection.activeGameObject;
        if (go == null) {
            return;
        }
        string path = GetPath (go);
        EditorGUIUtility.systemCopyBuffer = path;
        Debug.Log (path + "\n获取路径成功。");
    }

先使用递归获取路径,再将获取到的string放入剪切板即可。
MenuItem 里的&c 表示快捷键是 Alt + C ,%c则表示为Ctrl + C。
priority = 0 表示优先级,即在弹出窗口中的顺序。

判断Text里是否用到了Arial字体

有时Text如果用了默认的Arial字体,会在设备中显示异常,以下的方法可以筛选出包含Arial的Text并选中它。

[MenuItem ("Game/Find Text With Arial &2")]
    private static void FindTextWithArial () {
        GameObject go = GameObject.Find ("Canvas");
        Text[] textArr = go.GetComponentsInChildren ();
        foreach (Text text in textArr) {
            bool haveTarget = false;
            if (text.font == null) {
                Debug.Log ("无字体");
                haveTarget = true;
            } else {
                if (text.font.name == "Arial") {
                    Debug.Log ("该字体为 Arial的Text路径  path =" + GetPath (text.gameObject));
                    haveTarget = true;
                }
            }
            if (haveTarget) {
                Selection.activeGameObject = text.gameObject;
                return;
            }
        }
    }

设置自定义宏

[MenuItem ("Game/设置 ASYNC_MODE")]
    private static void SetAsyncMode () {
        string symbol = "ASYNC_MODE";
        PlayerSettings.SetScriptingDefineSymbolsForGroup (BuildTargetGroup.Android, symbol);
        PlayerSettings.SetScriptingDefineSymbolsForGroup (BuildTargetGroup.Standalone, symbol);
        PlayerSettings.SetScriptingDefineSymbolsForGroup (BuildTargetGroup.iOS, symbol);
    }

你可能感兴趣的:(unity 几个小工具)