今天无意间又找到了个好方法
1 2 3 4 5 6 7 8 9 10 11 12 |
[InitializeOnLoadMethod] static void Start () { Selection.selectionChanged = delegate { Debug.Log(Selection.activeObject.name); }; } |
前几天有朋友问过我怎么监听sceneview 和 hierarchy视图选择某个gameObject的事件,今天干好有时间我就研究研究。
下面的这两个代理事件大家都知道吧?其实都可以干这件事,但是不完美。因为每一帧都会调用一下,才能做判断
EditorApplication.hierarchyWindowItemOnGUI
EditorApplication.update
我觉得最好的办法,还是说当我选择某个gameObject的时候,由unity回调给我一个事件。所以我又找到了一个不完美的解决方法。在你需要监听点击的gameObject的脚本上添加如下代码。OnDrawGizmosSelected 就是选择的回调。但是它可能会回调多次,所以要进行一次判断保证它只执行一次。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#if UNITY_EDITOR bool selected = false; void OnDrawGizmosSelected() { if (!selected) { selected = true; Debug.Log(gameObject.name); } } #endif |
如果想在一个地方统一处理,那么就把事件传出去就行了。 OK 这篇文章是个伪命题,如果你有更好的方法欢迎再下面给我留言,谢谢!
- 本文固定链接: https://www.xuanyusong.com/archives/3773
- 转载请注明: 雨松MOMO 于 雨松MOMO程序研究院 发表
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!
可以用Selection.selectionChanged
请教下Selection.selectionChanged的用法,初学者,看了官方文档,内容也很少。假如我想用这个来实现,编辑器模式下,我场景中选中的物体变颜色,应该怎么写呢?把变色的部分放到{};就可以吗?。还有unity 的编辑器模式下如何实现每帧调用呀?
unity. handle 查一下这个关键字
谢谢,最后在onselectionchange()里处理了…虽然很卡 但是能用,handle我回头研究下~
GAMEOBJECT G=FIND(“XXX”);
IF(G!=NULL)
{G. OnDrawGizmosSelected=SHOWSELECTINFO)
FUN SHOWSELECTINFO()
{
DEBUG.LOG…
}
是不是这么搞?
不是, OnDrawGizmosSelected 得放在MonoBehaviour里
这东西是个事件吧