Unity EditorWindow GUI裁剪
Unity2017,想在编辑器自己实现一个类似TreeView的东西
public void OnGUI(Rect rect)
{
// ...
for (int i = 0; i < 100; i++)
{
int row = Mathf.FloorToInt(i / visibleColumns);
int column = i % m_VisibleColumns;
float x = rect.x + padding.left + column * (cellSize.x + spacing.x);
float y = rect.y + padding.top + row * (cellSize.y + spacing.y);
Rect cellRect = new Rect(x, y - scrollPos, cellSize.x, cellSize.y);
GUI.Box(cellRect, i.ToString());
}
}
然后发现一个问题:在y < rect.y时,超出了预想的区域,却画了出来,在网上没有搜到,记录一下
查阅对应源码,通过反射调用GUIClip.Push(),GUIClip.Pop()即可
// 反射工具类
public static class GUIClip
{
private static object CallReflection(string name, params object[] arguments)
{
Assmebly assembly = Assembly.Load("UnityEngine");
Type type = assembly.GetType("UnityEngine.GUIClip");
MethodInfo method = type.GetMethod(name, BindingFlags.Static | BindingFlags.NonPublick);
return method.Invoke(null, arguments);
}
// Push a clip rect to the stack with pixel offsets.
public static void Push(Rect screenRect, Vector2 scrollOffset, Vector2 renderOffset, bool resetOffset)
{
CallReflection("Push", screenRect, scrollOffset, renderOffset, resetOffset);
}
// Removes the topmost clipping rectangle, undoing the effect of the lastest GUIClip.Push
public static void Pop()
{
CallReflection("Pop");
}
}
一开始的OnGUI修改为
public void OnGUI(Rect rect)
{
// ...
GUIClip.Push(rect, Vector2.zero, Vector2.zero, false);
for (int i = 0; i < 100; i++)
{
int row = Mathf.FloorToInt(i / visibleColumns);
int column = i % m_VisibleColumns;
// 在clip的处理过程中不需要再手动加上rect的位置了
float x = padding.left + column * (cellSize.x + spacing.x);
float y = padding.top + row * (cellSize.y + spacing.y);
Rect cellRect = new Rect(x, y - scrollPos, cellSize.x, cellSize.y);
GUI.Box(cellRect, i.ToString());
}
GUIClip.Pop();
}
```csharp
Unity EditorWindow GUI裁剪的更多相关文章
- Unity EditorWindow知识记录
1.创建EditorWindow using UnityEditor; using UnityEngine; public class ZZEditorWindow : EditorWindow { ...
- Unity EditorWindow 笔记
一:功能 1.实例化 //设置插件在菜单栏的位置 和快捷键 [MenuItem("YCC's Tools/模型更改/更改父物体和测量长度 %W")] //实例化窗体 static ...
- Unity用GUI绘制Debug/print窗口/控制台-打包后测试
Unity游戏视窗控制台输出 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...
- unity, editorWindow lose data when enter play mode
我写了个editorWindow,其中有个成员变量m_x,在创建editorWindow的时候为m_x赋的值,而在editorWindow的OnGUI里把m_x显示出来. 当我开着这个editorWi ...
- unity, editorWindow update计时
对于editorWindow,Time.deltaTime不起作用,所以需用下面方法对update进行计时: public class myEditorWindow : EditorWindow{ p ...
- Unity绘制GUI连连看(尚未完善效果和重置)
OneImage.cs public class OneImage : MonoBehaviour { public int row, col; public Rect rect; public Te ...
- Unity之GUI控件
在这里就贴一个连接吧:GUI
- 王立平--Unity中间GUI Skin
C#文字: public class NewBehaviourScript2 : MonoBehaviour { public Texture t; public GUISkin skin; // U ...
- Unity引擎GUI之Slider和Scrollbar
Slider(滑动条):是一个主要用于形象的拖动以改变目标值的控件,他的最恰当应用是用来改变一个数值,最大值和最小值自定义,拖动滑块可在此之间改变,例如改变声音大小. Scrollbar(滚动条):是 ...
- Unity引擎GUI之Canvas和EventSystem
最近想写一套关于UGUI所有控件的基础使用教程系列,主要是根据本人的使用心得以及部分测试附带字面翻译来写的,所以其中可能难以避免会有不正确的地方. 好了进入主题,既然是第一篇,我觉得我有必要先介绍一下 ...
随机推荐
- 面由 AI 生|ZegoAvatar 捏脸技术解析
一.AI"卷"进实时互动 2021年,元宇宙概念席卷全球,国内各大厂加速赛道布局,通过元宇宙为不同的应用场景的相关内容生态进行赋能.针对"身份"."沉 ...
- JavaScript进阶指南: DOM与BOM操作,从初学者到专家,一步也能登天一篇文章就足够了
DOM与BOM操作 复习链接: http://c.biancheng.net/view/9360.html 事件对象: https://www.runoob.com/jsref/dom-obj-eve ...
- 【阅读笔记】超分之LANR-NLM算法
论文信息 [Single Image Super-Resolution via Locally Regularized Anchored Neighborhood Regression and Non ...
- Description Resource Path Location
解决办法 在项目上右键属性Properties,属性列表中选择Project Facets,在打开的Project Facets页面中的Java下拉列表中,选择相应版本. 有可能是java1.6 改成 ...
- 2021-7-11 Vue的自定义指令简单实例
获取焦点简单实例,用Vue.directive(ps:指令)定义,命名不要是关键字,用v-加自定义指令名称调用,而内部用钩子函数inserted来实现 <!DOCTYPE html> &l ...
- python: linux使用多版本python
安装python3.6 $ sudo add-apt-repository ppa:deadsnakes/ppa $ sudo apt update $ sudo apt install python ...
- OpenAI API访问速度不佳?试试用Vercel来加速!
前言 众所周知,使用openAI API在国内访问体验并不佳,经常遇到访问较慢或者访问失败的问题.本文着重讲讲怎么解决这个问题,让我们日常开发和使用能够更方便的体验到AI带来的便利 为了帮大家省钱,也 ...
- 从浏览器架构认识BOM和DOM
浏览器架构 JavaScript运行在浏览器,BOM就是连接JavaScript代码和浏览器的桥梁,而DOM就是用来操作各种标签元素的. BOM包括 window.history.location.d ...
- 好用的css3特性-过渡和2D变换
css3中有很多非常好用的特性,今天来总结一下与动画相关,包括过渡.2D变换. 首先来介绍一下过渡,过渡是在进行变化的时候进行的一个缓冲,如果没有过渡,当变更了元素的位置.大小的数据时,会一瞬间完成变 ...
- iostat命令安装及详解
iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视.它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况.同vmstat一样,i ...