有很多时候我们需要在编辑器查看一个Gameobject的移动,有些人采用Gizoms类,可是如果不想用,可以使用U3D内置的Icon类。

但是如果想在脚本中设置而不是通过手动选择呢?

Google之,大神在民间

http://forum.unity3d.com/threads/editor-script-to-set-icons-impossible.187975/

一、代码

  1. public enum LabelIcon
  2. {
  3. Gray = ,
  4. Blue,
  5. Teal,
  6. Green,
  7. Yellow,
  8. Orange,
  9. Red,
  10. Purple
  11. }
  12.  
  13. public enum Icon
  14. {
  15. CircleGray = ,
  16. CircleBlue,
  17. CircleTeal,
  18. CircleGreen,
  19. CircleYellow,
  20. CircleOrange,
  21. CircleRed,
  22. CirclePurple,
  23. DiamondGray,
  24. DiamondBlue,
  25. DiamondTeal,
  26. DiamondGreen,
  27. DiamondYellow,
  28. DiamondOrange,
  29. DiamondRed,
  30. DiamondPurple
  31. }
  32.  
  33. private static GUIContent[] labelIcons;
  34. private static GUIContent[] largeIcons;
  35.  
  36. public static void SetIcon(GameObject gObj, LabelIcon icon)
  37. {
  38. if (labelIcons == null)
  39. {
  40. labelIcons = GetTextures("sv_label_", string.Empty, , );
  41. }
  42.  
  43. SetIcon(gObj, labelIcons[(int)icon].image as Texture2D);
  44. }
  45.  
  46. public static void SetIcon(GameObject gObj, Icon icon)
  47. {
  48. if (largeIcons == null)
  49. {
  50. largeIcons = GetTextures("sv_icon_dot", "_pix16_gizmo", , );
  51. }
  52.  
  53. SetIcon(gObj, largeIcons[(int)icon].image as Texture2D);
  54. }
  55.  
  56. private static void SetIcon(GameObject gObj, Texture2D texture)
  57. {
  58. var ty = typeof(EditorGUIUtility);
  59. var mi = ty.GetMethod("SetIconForObject", BindingFlags.NonPublic | BindingFlags.Static);
  60. mi.Invoke(null, new object[] { gObj, texture });
  61. }
  62.  
  63. private static GUIContent[] GetTextures(string baseName, string postFix, int startIndex, int count)
  64. {
  65. GUIContent[] guiContentArray = new GUIContent[count];
  66.  
  67. var t = typeof(EditorGUIUtility);
  68. var mi = t.GetMethod("IconContent", BindingFlags.Public | BindingFlags.Static, null, new Type[] { typeof(string) }, null);
  69.  
  70. for (int index = ; index < count; ++index)
  71. {
  72. guiContentArray[index] = mi.Invoke(null, new object[] { baseName + (object)(startIndex + index) + postFix }) as GUIContent;
  73. }
  74.  
  75. return guiContentArray;
  76. }

二、使用

  1. void Test()
  2. {
  3. GameObject go = new GameObject("");
  4. Util.SetIcon(go, LabelIcon.Red);
  5.  
  6. }
  7.  
  8. void OnGUI()
  9. {
  10. if (GUI.Button(new Rect(, , , ), "I am a button")) Test();
  11. }

set gameobject Icons by Script的更多相关文章

  1. Execution Order of Event Functions

    In Unity scripting, there are a number of event functions that get executed in a predetermined order ...

  2. 【Unity3D游戏开发】之常用代码 (十二)

    //创建一个名为"Player"的游戏物体 //并给他添加刚体和立方体碰撞器. player=new GameObject("Player"); player. ...

  3. Unity3d中SendMessage 用法简单笔记

    Message相关有3条指令:SendMessage ("函数名",参数,SendMessageOptions) //GameObject自身的ScriptBroadcastMes ...

  4. 【转】Unity3D研究院之通过C#使用Advanced CSharp Messenger(五十)

    http://www.xuanyusong.com/archives/2165 Advanced CSharp Messenger 属于C#事件的一种. 维基百科中由详细的说明http://wiki. ...

  5. Rule of write code with C# in Unity3d

    Good Practice 普通的Public变量可以在inspect里显示,变量是可以在inspect里赋值并realtime反映在被attach到的GameObject上的.注意经典public ...

  6. Finite State Machine

    Contents [hide]  1 Description 2 Components 3 C# - FSMSystem.cs 4 Example Description This is a Dete ...

  7. Unity3D脚本中文系列教程(十二)

    http://dong2008hong.blog.163.com/blog/static/4696882720140313545332/ GameObject类,继承自Object Unity场景中所 ...

  8. Unity 生命周期

    原文翻译:            Execution Order of Event Functions            事件函数的执行顺序                        Edit ...

  9. Unity Destory

    Object.Destroy     public static function Destroy(obj: Object, t: float = 0.0F): void; public static ...

随机推荐

  1. USB设备驱动

    在Linux 内核中,使用usb_driver 结构体描述一个USB 设备驱动,usb_driver 结构体的定义如代码清单20.11 所示.代码清单20.11 usb_driver 结构体 stru ...

  2. SQL语句中各种数据类型转换方法总结

    1.Access 每个函数都可以强制将一个表达式转换成某种特定数据类型. 语法 CBool(expression) CByte(expression) CCur(expression) CDate(e ...

  3. 菜鸟学习Struts——Scope属性

    一.概念. 在Action映射配置中,Scope属性可以取值为:request或session.Scope属性表示:Struts框架在将     ActionForm对象(与目标Action匹配的Ac ...

  4. linux kernel 0.11 head

    head的作用 注意:bootsect和setup汇编采用intel的汇编风格,而在head中,此时已经进入32位保护模式,汇编的采用的AT&T的汇编语言,编译器当然也就变成对应的编译和连接器 ...

  5. Mysql数据库基本配置

    一 数据库基本配置包括编码方式 (安装环境是在linux下) 1.1 进入数据库 开启数据库服务:service mysqld start/restart(如果开启话可以重启) 关闭数据库服务:ser ...

  6. OpenStack:安装Neutron与provider network

    1. 安装(1)Install Networking services on a dedicated network node# apt-get install neutron-server neut ...

  7. Linux开机启动程序详解

    Linux开机启动程序详解我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤. ...

  8. Karaf 依赖equinox and felix,karaf 本Apache的很多项目作为基础框架

    6月17日是Apache Karaf作为Apache顶级项目.Karaf是个运行时包,包含了一个OSGi框架(Equinox或Felix).一个命令shell(Felix Gogo)及默认情况下内置的 ...

  9. 条款38:通过聚合设计has-a或者is-implemented-in-terms-of

    聚合:类型之间的一种关系,就是一种类型内含有另一种类型的变量. has-a: class Address { }; class PhoneNumber { }; class Person { publ ...

  10. 如何在github上fork一个项目来贡献代码以及同步原作者的修改

    [-] 如何贡献自己的力量 如何让自己的项目与原作者的项目保持同步 作为一个IT人,通过github进行学习是最快的成长手 段.我们可以浏览别人的优秀代码.但只看不动手还是成长得很慢,因此为别人贡献代 ...