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;
}
}


Unity定制 Image、Text的对象生成的更多相关文章

  1. Unity TextMeshPro替代Text组件创建简体中文字体纹理集

    Unity原生的Text组件有一个毛病,只要文本放大字体放大就会有毛边或锯齿,一个更好的解决方案是用TextMeshPro替代ugui中的Text组件. TMPro采用SDF文字渲染技术,可以使文字放 ...

  2. PHP“Cannot use object of type stdClass as array” (php在调用json_decode从字符串对象生成json对象时的报错)

    php再调用json_decode从字符串对象生成json对象时,如果使用[]操作符取数据,会得到下面的错误 错误:Cannot use object of type stdClass as arra ...

  3. java class加载机制及对象生成机制

    java class加载机制及对象生成机制 当使用到某个类,但该类还未初始化,未加载到内存中时会经历类加载.链接.初始化三个步骤完成类的初始化.需要注意的是类的初始化和链接的顺序有可能是互换的. Cl ...

  4. AOP代理对象生成

    AOP(Aspect-OrientedProgramming,面向方面编程)是OOP(Object-Oriented Programing,面向对象编程)的良好补充与完善,后者侧重于解决 从上到下的存 ...

  5. 深入理解Spring AOP之二代理对象生成

    深入理解Spring AOP之二代理对象生成 spring代理对象 上一篇博客中讲到了Spring的一些基本概念和初步讲了实现方法,当中提到了动态代理技术,包含JDK动态代理技术和Cglib动态代理 ...

  6. C#开发Unity游戏教程之游戏对象的行为逻辑方法

    C#开发Unity游戏教程之游戏对象的行为逻辑方法 游戏对象的行为逻辑——方法 方法(method),读者在第1章新建脚本时就见过了,而且在第2章对脚本做整体上的介绍时也介绍过,那么上一章呢,尽管主要 ...

  7. C#开发Unity游戏教程之游戏对象的属性变量

    C#开发Unity游戏教程之游戏对象的属性变量 Unity游戏对象的属性——变量 通过对上一章的学习,读者应该了解到了,游戏对象上的属性与脚本中的变量,建立联系的方式就是将脚本赋予游戏对象.上一章只是 ...

  8. (转载)Unity里实现更换游戏对象材质球

    在unity中本来想实现在一个背景墙上更换图片的功能 在网上查了一些资料说是用Image,但我是新手小白刚接触Unity不久好多组建还不会用,就想能不能通过改变游戏对象的材质球来更换游戏对象的背景. ...

  9. 报表生成poi----java操作java对象生成execl表单

    1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...

随机推荐

  1. Codeforces Round #324 (Div. 2) D

    D. Dima and Lisa time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  2. bzoj 3507 DP+哈希

    [Cqoi2014]通配符匹配 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 541  Solved: 235[Submit][Status][Dis ...

  3. 一键GHOST

    软件简介: 一键GHOST是"DOS之家"首创的4种版本(硬盘版/光盘版/优盘版/软盘版)同步发布的启动盘,适应各种用户需要,既可独立使用,又能相互配合.主要功能包括:一键备份系统 ...

  4. RSA加密/解密 Decryption error异常解决

    RSA加密/解密 Decryption error异常解决 import java.io.ByteArrayOutputStream; import java.security.Key; import ...

  5. HDU1263 map二维运用

    #include <iostream> #include <cstdio> #include <cstring> #include <map> #inc ...

  6. Bzoj3093 [Fdu校赛2012] A Famous Game

    Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 251  Solved: 136 Description Mr. B and Mr. M like to ...

  7. 管理页面的类 PageHelper

    using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Da ...

  8. VC++中有关句柄和指针及其转换(转)

    原文转自 https://blog.csdn.net/jearmy/article/details/47030011 1.MFC窗口的句柄和指针的转换 (1) 一般窗口对象都会有一个其对应的句柄变量, ...

  9. win7兼容visual studio 2005 的方法

    http://blog.sina.com.cn/s/blog_74d572890100xv7p.html 今天花了4个小时,结合网上的介绍,本人终于找到了一个可以在win7环境下运行visual st ...

  10. 【原创】Linux环境下的图形系统和AMD R600显卡编程(7)——AMD显卡的软件中断

    CPU上处理的中断可以分成“硬件中断”和“软件中断”两类,比如网卡产生的中断称为硬件中断,而如果是软件使用诸如"int 0x10"(X86平台上)这样的指令产生中断称为软件中断,硬 ...