zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    
    






    
  • 相关阅读:
    Leetcode: Flatten Binary Tree to Linked List
    POJ 1180 Batch Scheduling
    STL容器
    关于bfs时间轴
    dfs遍历痕迹的清理
    dfs、遍历与for
    在各OJ上的名号
    哈尔滨理工大学第七届程序设计竞赛初赛(BFS多队列顺序)
    东北林业大学第12届ACM(打表)
    浙江工业大学迎新预赛(容器的使用)
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7257436.html
Copyright © 2011-2022 走看看