1.Unity IMGUI TreeView简单探索(一)
Unity IMGUI TreeView简单探索(一)
因为感觉可能即将要用上了,源码因为我想做个魔兽地图编辑器触发编辑器的源码那种树状的编辑器,但并不是源码完全照搬,就是源码参考一下树的结构。
因为那个对话框我没找到有啥接口,源码能让它挡住整个界面的源码红色游戏挂机源码输入,除非它关闭,源码我又不想在EditorWindow里自己另外实现一个嵌套窗口,源码嗯,源码所以做点妥协。源码参数也在树结构里好了。源码
这篇文章就简单记录一下简单探索的源码得到的内容,在寻找解决问题的源码路上努力,以及最后自我麻痹的源码过程吧。
首先需要继承TreeView这个类才能进行开始,源码那个TreeViewState直接new就行。
搞定之后调用一遍Reload。然后你在Window的OnGUI那边提供Rect参数并调用它的绘制方法就好啦!
在那之前你的django 博客源码类必须实现BuildRoot方法,在你搞定之后调用一下SetupParentsAndChildrenFromDepths这个方法,它的作用是根据depth关系去设定节点(TreeViewItem)之间的父子关系。
与之对应的还有SetupDepthsFromParentsAndChildren,根据depth设定父子关系,具体情况具体使用了。
另外,不管是Reload还是打开关闭折叠,都会去调用BuildRows。区别就是开源oa java 源码前者连BuildRoot也会调用BuildRows是根据Root去生成一个List给TreeView使用用作画面渲染,每当结构发生改变的时候,都得重新构造一遍。
所以当你Add或者Remove等导致树结构发生改变的时候,直接调用Reload,不要有心理负担。
我去看过源码,直接调用TreeViewItem的AddChild方法在显示方面上是会有出问题的,你还得去处理层级问题,以及调用它的江恩理论源码SetExpanded false然后true。因为你不调用的话,他就不会刷新结构,你新加的节点他就会看不见。至少我觉得挺离谱的,说不定我误解了他的设计也说不定。关键的东西全给private或internal了,也没看到接口放出来(如果有大佬知道的话可以告诉我一下呀,反射就免了!)
你可能在想,菜单管理页面源码我可以直接调用BuildRows呀!没用的,TreeView内部的那个controller还是dataSource根本就没同步到,在下一帧就会报错。
无论你怎么改通过GetRows拿到的列表的结构也没屁用。还是老老实实像官方一样直接粗暴的Reload。(如果有更好的方法谁愿意这么干呢?)
说实话我只是不想因为层级变动就直接重新生成整个结构,或者你直接将list缓存起来,判断一下啥也不做也行,但我强迫症犯了。
我浪费了很多时间去寻找解决方案,最后还是放弃了。最后打算参考官方的那个TreeViewWithTreeModel的做法。
反正本来就是为了给某些结构做可视化显示嘛…就用这些理由麻痹自己钻牛角尖的心吧。
基本上一些基础的使用光是看文档或者官方示例就能明白要怎么用了,所以我有点懒得写…
诸如改名操作,拖拽操作,双击项,右键项(Context,一般拿来弹个ContextMenu用)
增(TreeViewItem.AddChild)删(TreeViewItem.children.Remove)查(TreeView.FindItem FindRows)改啊啥的…
简单随便看两眼,有需要再去查文档,没必要全部硬塞进去。有空就看看官方怎么做的好了,先有点本事了能用得起来,以后再追求那些。
官网的阅读案例顺序比较推荐从
Simple Tree Window
Transform Hierarchy
Custom Row Heights
Multi Columns
看起
先看他们的window看个大概,再有啥想知道的不懂的看view的实现。
以上我说到的那些,诸如“下一帧”的这些全是我主观看法,没去验证,酌情阅读吧。
如果有什么更好的方法也希望有大佬能够指出来,感激不尽。
(百度了大半年搜的文章全部都避开了RemoveChild和AddChild来写,很棒~)
(另外预览怎么把我的排版全干掉了……?罢了)