Unity定制 Image、Text的對象生成


2016.4.14


昨天看到 雨凇的 Unity3D研究院之UGUI一個優化效率小技巧:  http://www.xuanyusong.com/archives/4006


完好了他所說的代碼:

 

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using UnityEditor;
using UnityEngine.EventSystems;

/// <summary>
/// 創建 Text、Image 的時候默認不選中 raycastTarget 等
/// </summary>
public class OverrideCreateUIMenu
{
    /// <summary>
    /// 第一次創建UI元素時。沒有canvas、EventSystem全部要生成,Canvas作為父節點
    /// 之后再空的位置上建UI元素會自己主動加入到Canvas下
    /// 在非UI樹下的GameObject上新建UI元素也會 自己主動加入到Canvas下(默認在UI樹下)
    /// 加入到指定的UI元素下
    /// </summary>
    [MenuItem("GameObject/UI/Image")]
    static void CreatImages()
    {
        var canvasObj = SecurityCheck();

        if (!Selection.activeTransform)      // 在根文件夾創建的, 自己主動移動到 Canvas下
        {
            // Debug.Log("沒有選擇對象");
            Image().transform.SetParent(canvasObj.transform);
        }
        else // (Selection.activeTransform)
        {
            if (!Selection.activeTransform.GetComponentInParent<Canvas>())    // 沒有在UI樹下
            {
                Image().transform.SetParent(canvasObj.transform);
            }
            else
            {
                Image();
            }
        }
    }

    private static GameObject Image()
    {
        GameObject go = new GameObject("x_Image", typeof(Image));
        go.GetComponent<Image>().raycastTarget = false;
        go.transform.SetParent(Selection.activeTransform);
        Selection.activeGameObject = go;
        return go;
    }





    // 我們要設置默認字體
    [MenuItem("GameObject/UI/Text")]
    static void CreatTexts()
    {
        var canvasObj = SecurityCheck();

        if (!Selection.activeTransform)      // 在根文件夾創建的。 自己主動移動到 Canvas下
        {
            // Debug.Log("沒有選擇對象");
            Text().transform.SetParent(canvasObj.transform);
        }
        else // (Selection.activeTransform)
        {
            if (!Selection.activeTransform.GetComponentInParent<Canvas>())    // 沒有在UI樹下
            {
                Text().transform.SetParent(canvasObj.transform);
            }
            else
            {
                Text();
            }
        }
    }

    private static GameObject Text()
    {
        GameObject go = new GameObject("x_Text", typeof(Text));
        var text = go.GetComponent<Text>();
        text.raycastTarget = false;
        text.font = AssetDatabase.LoadAssetAtPath<Font>("Assets/Arts/Fonts/zh_cn.TTF");   // 默認字體
        go.transform.SetParent(Selection.activeTransform);
        Selection.activeGameObject = go;

        //go.AddComponent<Outline>();   // 默認加入 附加組件
        return go;
    }


    // 假設第一次創建UI元素 可能沒有 Canvas、EventSystem對象!
    private static GameObject SecurityCheck()
    {
        GameObject canvas;
        var cc = Object.FindObjectOfType<Canvas>();
        if (!cc)
        {
            canvas = new GameObject("_Canvas", typeof(Canvas));
        }
        else
        {
            canvas = cc.gameObject;
        }
        if (!Object.FindObjectOfType<EventSystem>())
        {
            GameObject eventSystem = new GameObject("_EventSystem", typeof(EventSystem));
        }

        return canvas;
    }
}










免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM