【Unity】新的UI系统技巧2
来源:互联网 发布:看新闻的软件 编辑:程序博客网 时间:2024/05/01 05:19
定制一个刻度条相关的控件,如下:
基本原理是继承Graphic类,并重写OnPopulateMesh函数,用到一些基本的OpenGL画矩形的算法。比较有参考的是制作控件的习惯和编辑器的使用,从而使工程模块化,提供工作效率。
代码如下:
using UnityEngine;using UnityEngine.UI;using System.Collections;using System.Collections.Generic;[ExecuteInEditMode]public class BloodBar : Graphic { public float _bloodNum = 7; public float bloodNum { get { return _bloodNum; } set { _bloodNum = value; if(_bloodNum < 1) { _bloodNum = 1; Debug.LogWarningFormat("The number should not less than 1!"); } SetAllDirty(); } } private float lineWidth = 1f; private float deltaWidth = 1; /// <summary> /// Update the UI renderer mesh. /// </summary> protected override void OnPopulateMesh(VertexHelper vh) { Rect r = GetPixelAdjustedRect(); deltaWidth = r.width / bloodNum; Vector2 offset = new Vector2(r.xMin, r.yMin); vh.Clear(); for(int i = 0; i < bloodNum-1; i++) { drawLine(vh, r, offset, i); } } private void drawLine(VertexHelper vh, Rect r, Vector2 offset, int idx) { float pos = (idx + 1) * deltaWidth; int ti = idx * 4; float p = (idx + 1) % 5 == 0 ? 0 : 0.4f; vh.AddVert(new Vector2(pos, r.height*p) + offset, Color.black, Vector2.zero); vh.AddVert(new Vector2(pos + lineWidth, r.height*p) + offset, Color.black, Vector2.zero); vh.AddVert(new Vector2(pos + lineWidth, r.height) + offset, Color.black, Vector2.zero); vh.AddVert(new Vector2(pos, r.height) + offset, Color.black, Vector2.zero); vh.AddTriangle(0 + ti, 1 + ti, 2 + ti); vh.AddTriangle(2 + ti, 3 + ti, 0 + ti); }}
编辑器代码:
using UnityEngine;using System.Collections;using UnityEditor;[CustomEditor(typeof(BloodBar))]public class BloodBarEditor : Editor { SerializedProperty bloodNum; void OnEnable() { bloodNum = serializedObject.FindProperty("_bloodNum"); } public override void OnInspectorGUI() { serializedObject.Update(); //DrawDefaultInspector(); //BloodBar btns = (BloodBar)target; //btns.bloodNum = EditorGUILayout.Slider(btns.bloodNum, 0, 30); EditorGUILayout.Slider(bloodNum, 1, 30, new GUIContent("blood Num")); serializedObject.ApplyModifiedProperties(); }}
请参考第一篇 【Unity】新的UI系统技巧2
0 0
- 【Unity】新的UI系统技巧2
- 【Unity】新的UI系统技巧
- 【Unity】新的UI系统技巧
- Unity新UI系统
- Unity修改分数的小技巧(UI篇)(Unity萌新的备忘录)
- 【UI系统】如何评价 Unity 3D 新的 UI 系统?
- Unity 新UI事件系统(EventSystem) Demo
- 详解Unity 4.6新UI的布局
- 详解Unity 4.6新UI的布局
- Unity新UI系统UGUI与NGUI效率对比
- Unity新UI系统概述——Canvas
- Unity新UI系统概述——Basic Layout
- Unity新UI系统概述——Visual Components
- Unity新UI系统概述——Interaction Components
- Unity新UI系统概述——Animation Integration
- Unity新UI系统概述——Auto Layout
- Unity新UI系统概述——Rich Text
- Unity新UI系统概述——Auto Layout
- OpenCV两种方式创建图像序列文件xml,yml,yaml等
- day07_XML模块
- sqlserver处理重复项多次显示问题
- 各种维生素的效用
- CSS高级技巧
- 【Unity】新的UI系统技巧2
- 修改显示 Preference summary 里的值, 显示Manifest 里的程序版本
- 0725
- Git使用教程
- java 解压zip中文文件 出现错误
- 【HTTP1.1中文手册】
- 转载:哈希表
- SVN-Permission denied
- 数据类型