最近在跟师兄做寻路编辑插件,发现SceneView这个是一个很不错的东西,但是官方文档里居然没有这个类的说明,难道是搜索姿势不正确,还是说有新的东西把这个代替了。
是什么?
就是视图scene窗口的编辑类。它是继承于SearchableEditorWindow, IHasCustomMenu这两个东西的。
SceneViewCallout小用法
也没有把这个研究透彻,就说说我用到这个里面的几个小接口吧。
切换2d视角
我们都知道scene里面有一个按键是2d,点击它就可以转换到2d视角。
Scene Gizmo
也可以通过Scene Gizmo点击或者右键选择来控制场景摄像机的角度与投射。
这个是把你的scene角度调为2d视角:
sceneView = SceneView.lastActiveSceneView;
sceneView.in2DMode = true;
SceneView.lastActiveSceneView按我的理解应该就是上一次渲染出来的scene场景。
当然咱们如果已经是2d视角,再点一次就回到我们之前的视角,这个的实现:
private bool lastProjection;
private Quaternion lastQuaternion;
private void Change2dView(bool state)
{
var sceneView = SceneView.lastActiveSceneView;
if (state)
{
lastProjection = sceneView.orthographic;
lastQuaternion = sceneView.rotation;
}
else
{
sceneView.LookAt(sceneView.pivot, lastQuaternion, sceneView.size, lastProjection);
}
sceneView.in2DMode = state;
}
当然系统的切换到2d的按钮,还设置了自动切换工具。
工具
Tools.current = Tool.None;
Tools.viewTool = ViewTool.None;
这样即可。
切换自定义视角
官方接口就只给出了转向2d的角度,但是我们看右键点击却有这么多,然后辗转查询,下面这些切换都是在SceneViewRotation这个类中编写的。具体的就不废话了。
右键点击
细心的读者肯定都知道这个怎么做了,就是使用这一句代码就好了:
sceneView.LookAt(sceneView.pivot, lastQuaternion, sceneView.size, lastProjection);
只用需要更改rotation与peojection即可。
OnSceneGUI事件
这个有点像OnGUI的一个事件方法,传入的就是一个场景视图。
SceneView.onSceneGUIDelegate += OnSecneGUI;
方法中可以
private void OnSecneGUI(SceneView sceneView){
var current = Event.current;
switch (current.type)
{
case EventType.KeyUp:
//键盘按键检测
break;
case EventType.MouseUp:
//鼠标弹起,这里是鼠标所有的点击,如果要在区别如下
if (current.button == 0)
{
DrawPoint();
}
break;
case EventType.MouseDown:
//鼠标按下
break;
case EventType.MouseDrag:
//鼠标拖
break;
case EventType.Repaint:
//重绘
break;
case EventType.Layout:
//布局
break;
}
}
详细的事件类型可以看这里
禁止鼠标点击
只需要在EventType.Layout这个选项中添加:
HandleUtility.AddDefaultControl(GUIUtility.GetControlID(FocusType.Passive));
当然就是忽略点击。
嗯,暂时就这么多吧。谢谢了。
网友评论