找回密码
 立即注册
查看: 216|回复: 0

Unity编辑器扩展笔记(Scene视窗相关)

[复制链接]
发表于 2022-8-5 09:21 | 显示全部楼层 |阅读模式
1. 代码控制Hierarchy上的小手工具(pick control)

SceneVisibilityManager.instence.EnablePicking(Gameobject, bool [with children])
SceneVisibilityManager.instence.DisablePicking(Gameobject, bool [with children])
如果使用小眼睛工具, 就换成Hide/Show
2. unity不运行时检测按键事件

https://bobsong.cn/945.html
Event e = Event.current;        
if (e.isKey)
if(e.keyCode == KeyCode.Space)
3. 判断alt,ctrl等功能键是否已按下

Event e = Event.current;
e.alt = true;
e.control;
4. Scene的更新

SceneView.duringSceneGui += Function(SceneView arg)
5. Scene窗口绘制GUI控件

https://www.cnblogs.com/llllllvty/p/9905899.html
SceneView.duringSceneGui
2018的为onSceneGUIDelegate
SceneView.onSceneGUIDelegate = delegate (SceneView sceneView)
{
    Handles.BeginGUI();
    GUI.Label(new Rect(0f, 0f, 50f, 15f), "标题");
    GUI.Button(new Rect(0f, 20f, 50f, 50f),
    AssetDatabase.LoadAssetAtPath<Texture>("Assets/unity.png"));
    Handles.EndGUI();
};
6. Gameobject坐标转Scene窗口屏幕坐标

使用射线检测,原理和Game中点击物体一样,但是射线转换用的工具类不一样
HandleUtility.GUIPointToWorldRay(MousePos);
7. 重绘Scene窗口

SceneView.currentDrawingSceneView.Repaint();
8. Scene窗口发射射线

https://blog.csdn.net/qq_21397217/article/details/108683462
Ray ray = HandleUtility.GUIPointToWorldRay(currentEvent.mousePosition);
9. 禁止scene窗口拖动时框选

我们在扩展Unity的编辑器的时候经常会需要实现笔刷这样的一个功能,比如我们需要用鼠标点击或者拖拽就会生成一些游戏物体。
但是Unity默认在Scene窗口下鼠标左键点击、拖拽是选择游戏物体的功能,这会影响我们的笔刷功能。 我们可以通过在OnSceneGUI周期函数下面加这句代码来屏蔽关掉Unity默认的鼠标选择功能:
void OnSceneGUI(){
    HandleUtility.AddDefaultControl(GUIUtility.GetControlID(FocusType.Passive));
}
作者:m969
链接:https://www.jianshu.com/p/48ad02d57095
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 17:02 , Processed in 0.262825 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表