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裁剪的更多相关文章

  1. Unity EditorWindow知识记录

    1.创建EditorWindow using UnityEditor; using UnityEngine; public class ZZEditorWindow : EditorWindow { ...

  2. Unity EditorWindow 笔记

    一:功能 1.实例化 //设置插件在菜单栏的位置 和快捷键 [MenuItem("YCC's Tools/模型更改/更改父物体和测量长度 %W")] //实例化窗体 static ...

  3. Unity用GUI绘制Debug/print窗口/控制台-打包后测试

    Unity游戏视窗控制台输出 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...

  4. unity, editorWindow lose data when enter play mode

    我写了个editorWindow,其中有个成员变量m_x,在创建editorWindow的时候为m_x赋的值,而在editorWindow的OnGUI里把m_x显示出来. 当我开着这个editorWi ...

  5. unity, editorWindow update计时

    对于editorWindow,Time.deltaTime不起作用,所以需用下面方法对update进行计时: public class myEditorWindow : EditorWindow{ p ...

  6. Unity绘制GUI连连看(尚未完善效果和重置)

    OneImage.cs public class OneImage : MonoBehaviour { public int row, col; public Rect rect; public Te ...

  7. Unity之GUI控件

    在这里就贴一个连接吧:GUI

  8. 王立平--Unity中间GUI Skin

    C#文字: public class NewBehaviourScript2 : MonoBehaviour { public Texture t; public GUISkin skin; // U ...

  9. Unity引擎GUI之Slider和Scrollbar

    Slider(滑动条):是一个主要用于形象的拖动以改变目标值的控件,他的最恰当应用是用来改变一个数值,最大值和最小值自定义,拖动滑块可在此之间改变,例如改变声音大小. Scrollbar(滚动条):是 ...

  10. Unity引擎GUI之Canvas和EventSystem

    最近想写一套关于UGUI所有控件的基础使用教程系列,主要是根据本人的使用心得以及部分测试附带字面翻译来写的,所以其中可能难以避免会有不正确的地方. 好了进入主题,既然是第一篇,我觉得我有必要先介绍一下 ...

随机推荐

  1. 面由 AI 生|ZegoAvatar 捏脸技术解析

    一.AI"卷"进实时互动 2021年,元宇宙概念席卷全球,国内各大厂加速赛道布局,通过元宇宙为不同的应用场景的相关内容生态进行赋能.针对"身份"."沉 ...

  2. JavaScript进阶指南: DOM与BOM操作,从初学者到专家,一步也能登天一篇文章就足够了

    DOM与BOM操作 复习链接: http://c.biancheng.net/view/9360.html 事件对象: https://www.runoob.com/jsref/dom-obj-eve ...

  3. 【阅读笔记】超分之LANR-NLM算法

    论文信息 [Single Image Super-Resolution via Locally Regularized Anchored Neighborhood Regression and Non ...

  4. Description Resource Path Location

    解决办法 在项目上右键属性Properties,属性列表中选择Project Facets,在打开的Project Facets页面中的Java下拉列表中,选择相应版本. 有可能是java1.6 改成 ...

  5. 2021-7-11 Vue的自定义指令简单实例

    获取焦点简单实例,用Vue.directive(ps:指令)定义,命名不要是关键字,用v-加自定义指令名称调用,而内部用钩子函数inserted来实现 <!DOCTYPE html> &l ...

  6. python: linux使用多版本python

    安装python3.6 $ sudo add-apt-repository ppa:deadsnakes/ppa $ sudo apt update $ sudo apt install python ...

  7. OpenAI API访问速度不佳?试试用Vercel来加速!

    前言 众所周知,使用openAI API在国内访问体验并不佳,经常遇到访问较慢或者访问失败的问题.本文着重讲讲怎么解决这个问题,让我们日常开发和使用能够更方便的体验到AI带来的便利 为了帮大家省钱,也 ...

  8. 从浏览器架构认识BOM和DOM

    浏览器架构 JavaScript运行在浏览器,BOM就是连接JavaScript代码和浏览器的桥梁,而DOM就是用来操作各种标签元素的. BOM包括 window.history.location.d ...

  9. 好用的css3特性-过渡和2D变换

    css3中有很多非常好用的特性,今天来总结一下与动画相关,包括过渡.2D变换. 首先来介绍一下过渡,过渡是在进行变化的时候进行的一个缓冲,如果没有过渡,当变更了元素的位置.大小的数据时,会一瞬间完成变 ...

  10. iostat命令安装及详解

    iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视.它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况.同vmstat一样,i ...