unity

UNITY 手动定制inspector

依然范特西╮ 提交于 2019-12-03 16:03:44
UNITY 手动定制inspector using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using System; [ExecuteInEditMode] [CustomEditor( typeof (testxx))] public class testxxEditor : Editor { [SerializeField] public float slider_value = 0.3f ; public bool chk = false ; SerializedProperty check; // Use this for initialization void Start () { } void OnEnable() { check = serializedObject.FindProperty( " x " ); Debug.Log( " ============ " + check.floatValue); } // Update is called once per frame void Update () { } public override void OnInspectorGUI() { if (GUILayout

unity 选择不同的枚举在面板上显示不同的属性

北战南征 提交于 2019-12-03 16:03:28
一、创建一个普通类 using System.Collections; using System.Collections.Generic; using UnityEngine; public class MyJointManager : MonoBehaviour { private enum Hand { LeftHand, RightHand } private enum LeftJoint { LeftWrist, LeftElbow, LeftShoulder } private enum RightJoint { RightWrist, RightElbow, RightShoulder } [HideInInspector] //要在面板中隐藏,否则的话会重复显示在面板上 [SerializeField, Tooltip("手")] private Hand hand = Hand.LeftHand; [HideInInspector] [SerializeField, Tooltip("左手关节")] private LeftJoint leftJoint = LeftJoint.LeftElbow; [HideInInspector] [SerializeField, Tooltip("右手关节")] private RightJoint rightJoint =

Unity 属性面板Inspector定制

不问归期 提交于 2019-12-03 16:02:06
1、显示枚举对应的参数 脚本1: using System.Collections; using System.Collections.Generic; using UnityEngine; public enum EnumTest { None, EnumValue1, EnumValue2, EnumValue3 } public class TestInspector : MonoBehaviour { [SerializeField] private EnumTest _enumTemp = EnumTest.None; [SerializeField] private int _temp1 = 1; [SerializeField] private int _temp2 = 2; [SerializeField] private int _temp3 = 3; } 脚本2:(放在Editor文件夹下) using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; //Tip: typeof(脚本名) [CustomEditor(typeof(TestInspector)),CanEditMultipleObjects] public

Unity编辑器拓展之三:拓展Unity的Hierarchy面板

大城市里の小女人 提交于 2019-12-03 16:00:57
效果图: 上图中在Hierarchy右侧绘制了Toggle,Label,以及自定义的texture和Unity原声的Texture,知道了原理,其实这些都很简单。。 这里主要是使用了EditorApplication类下的HierarchyWindowItemCallback类型的hierarchyWindowItemOnGUI // // 摘要: // /// // Delegate to be called for every visible list item in the HierarchyWindow on every // OnGUI event. // /// // // 参数: // instanceID: // // selectionRect: public delegate void HierarchyWindowItemCallback ( int instanceID, Rect selectionRect); 该委托有两个参数,一个是int类型的instanceID,通过该ID利用EditorUtility.InstanceIDToObject(instanceID)可以获取该GameObject,然后第二个参数Rect,也就是该物体在Hierarchy面板的位置信息了,通过这两个数据,在Hierarchy面板上拓展就很简单了。 using System

【Unity】Hierarchy面板排序

百般思念 提交于 2019-12-03 15:57:03
文章转载至: http://www.seven-fire.cn/archives/179 命名空间的引用: using UnityEngine; using UnityEditor; 放在Editor文件夹下即可 <span style="font-family:宋体;"><span style="color:#696969;">按字母</span>升序排列 public class AscendingSort : BaseHierarchySort { public override int Compare( GameObject lhs , GameObject rhs) { if (lhs == rhs) { return 0; } if (lhs == null) { return -1; } if (rhs == null) { return 1; } return EditorUtility .NaturalCompare( lhs.name , rhs.name); } }</span> 按字母降序排列 public class DescendingSort : BaseHierarchySort { public override int Compare( GameObject lhs , GameObject rhs) { if (lhs == rhs) {

Unity的Scene场景选中物体Hierarchy窗口无法锁定选中的物体的问题

若如初见. 提交于 2019-12-03 15:55:11
如果Unity的Scene场景选中某个gameObject,Hierarchy窗口无法锁定选中的物体,重启Unity也无效 此时只需要切换一下unity的Layout即可恢复正常 这应该是Unity的bug 来源: CSDN 作者: 林新发 链接: https://blog.csdn.net/linxinfa/article/details/77675671

Unity中为UGUI精灵自定义事件响应区域

别来无恙 提交于 2019-12-03 15:54:05
到目前为止,UGUI组件功能还很局限,这就需要开发者自己动手实现某些开发需求。UGUI中的组件(以按钮Button为例)默认响应事件的区域为整个UI元素区域,我们也可以自定义精灵某些特定区域用来响应事件。 我们知道所有UI都有Image组件,其中有RaycastTarget属性,勾选该属性为true则表示运行时UI精灵会响应相应交互事件,这套UGUI(包括NGUI)是通过射线检测实现的交互响应,那么我们可以通过添加可编辑碰撞器的方式,修改Image默认检测区域: 现在我们想要点击按钮中间三角形区域按钮才有效,需要删除Button原有Image组件, 接着为按钮Button添加PolygonCollider2D组件: 点击EditCollider编辑该多边形碰撞器, 接着我们添加一个C#类:CustomButtonArea,该类继承自Image,我们查看Image中原生方法,发现有如下内容: 完整代码截图如下: 我们重写了Image中一个返回值为Bool的是否为射线检测区域的方法, 为Button添加自定义类,运行unity,我们发现整个按钮只有点击中间三角形区域按钮才有响应。 来源: CSDN 作者: Pai大星 链接: https://blog.csdn.net/qq_38190993/article/details/69257990

【UnityEditor】制作一个unity ui 脚本自动生成器

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-03 15:53:46
制作这个东西最初的想法是因为在之前的公司工作的时候,发现有一个这个蛮方便的,离职后,发现要自己写一些UI的赋值和定义的内容,实在是太麻烦了,然后就想这自己做一个简单版本的UI脚本生成器,优化自己的工作效率,然后结合目前的内容,做一个简单的版本的。只是实现了一些相对来说比较基本的内容。 先看一下图吧: 点击一下,然后选择制作好的 UI 预设: 这里做了一些判断,只能选择 Canvas 下面的一个子物体作为开始,如果你非要刁难的话,我也没有办法,这个东西本来就是根据自己的喜好来的。然后为了防止误点,一旦生成左边的树形图后,想要重新更改选择,麻烦请关闭窗口重新选择。 然后依次点击 中间的按钮会有如下效果: 大概就是以上的内容了,然后给位可以根据自己的项目需求进行文本的生成的配置。 有一些待优化的地方: 待优化的地方: 1.选择game object的时候不能进行它组件的选择。 比如:Button组件一般都包含一个Image和一个Button,更好的选择是能够按住需要进行选择, 目前的情况是两个组件都能够生成对应的代码。 2.暂时没有支持Transform/RectTransform代码的生成。 因为设计的时候,生成代码的基础是基于UIBehavior,而这个是所有UI组件的父类,然而它是与RectTransform/Transform 不同的分支,所以在这点上面不是很好 3

[Unity Editor]10行代码搞定Hierarchy排序

送分小仙女□ 提交于 2019-12-03 15:51:11
本文固定连接: http://www.seven-fire.cn/archives/179 转载请注明出处:http://www.seven-fire.cn 在日常的工作和研究中,当给我们的场景摆放过多的物件的时候,Hierarchy面板就会变得杂乱不堪。比如这样: 过多的层次结构充斥在里面,根层的物件毫无序列可言,整个层次面板显示非常的杂乱不堪,如果还有使用代码添加的物件,那就更加的惨不忍睹。里面的物件没有任何的规律可言(当然如果你们的美术有强迫症的话,也许会把物件分类,按规律排列的整齐,如果不是就惨了)。如果费时费力的排列好里面的结构,过一段时间就又会变乱。 而如果要在杂乱的层次结构中找到我们想要的物体就需要费些体力和眼神了,就如同在垃圾堆里找宝石一样。 如果Hierarchy能按字母排序的话,那该多好!一个简单的字母排序,就会让整个结构看起来都是规规矩矩、整整齐齐。不论怎样也都会好过没有排序的。 比如下面这样: 别放弃,天无绝人之路,想让Hierarchy按字母排序,非常的简单,整个文件只有10行代码,其中using xxx占用了2行,符号占用2行,类名和函数名各1行,真正工作的代码只有4行。 代码结构就是下面这样 效果就是下面这个样子 哈哈,想不想让你的层次结构排列得整整齐齐的,想的话,那动动手指回复一下吧,10行代码打包带走,保证不吃亏。 PS:在回复中发现

(二)Unity编辑器扩展之Hierarchy视图面板

不打扰是莪最后的温柔 提交于 2019-12-03 15:50:58
1、拓展菜单 拓展Hierarchy面板,Create按钮下的菜单项都在GameObject下,代码如下; //Create按钮下的菜单项都在GameObject下 [MenuItem("GameObject/My Create/cube", false, 0)] static void CreateCube() { GameObject.CreatePrimitive(PrimitiveType.Cube); } 效果 2、拓展布局 [InitializeOnLoadMethod] static void InitializeOnLoadMethod() { EditorApplication.hierarchyWindowItemOnGUI = delegate (int instanceID, Rect selectionRect) { if (Selection.activeObject && instanceID == Selection.activeObject.GetInstanceID()) { float width = 50f; float height = 20f; selectionRect.x += (selectionRect.width - width); selectionRect.width = width; selectionRect