SceneView窗口自定义 是通过Handles类 控制柄来自定义界面,通过HandleUtility 控制柄工具辅助。
Handles控制柄到底是什么?
直接上图就明白了:
如上图箭头所指的,我们都可以通过Handles控制柄来画出来。所谓的Handles控制柄就是我们选择的物体后在场景里的控制点。
直接上代码小测试
首先加一个空脚本目的是挂在的物体上,然后自定义脚本窗口
using System.Collections.Generic;
using UnityEngine;
public class HandleTest : MonoBehaviour {
}
然后将此脚本挂在到任意物体上
然后定义此脚本窗口
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(HandleTest))]
public class HandleTestEditor : Editor
{
GameObject gameObject;
Transform _transformPoint;
Transform transformPoint
{
get
{
if (!_transformPoint)
{
_transformPoint = new GameObject("transformPoint").transform;
}
return _transformPoint;
}
}
float cylinderSize = 1;
Camera camera;
Camera _cameraTemp;
Camera cameraTemp
{
get
{
if (!_cameraTemp)
{
_cameraTemp = new GameObject("cameraTemp").AddComponent<Camera>();
}
return _cameraTemp;
}
}
private void OnEnable()
{
gameObject = ((HandleTest)target).gameObject;
camera = Camera.main;
}
private void OnSceneGUI()
{
drawCylinder();
drawShere();
lookCamera();
sceneComponent();
}
Vector3 point;
private void lookCamera()
{
point = Handles.PositionHandle(point, Quaternion.identity);
transformPoint.position = point;
gameObject.transform.LookAt(transformPoint);
}
/// <summary>
/// 画圆柱
/// </summary>
private void drawCylinder()
{
Handles.color = Color.red;
Handles.CylinderHandleCap(0,
gameObject.transform.position + new Vector3(4, 0, 0),
gameObject.transform.rotation,
cylinderSize, EventType.Repaint);
}
private void sceneComponent()
{
Handles.BeginGUI();
GUILayout.BeginArea(new Rect(100,100,500,500));
GUILayout.Button("按钮");
GUILayout.EndArea();
Handles.EndGUI();
}
/// <summary>
/// 画圆
/// </summary>
private void drawShere()
{
Handles.color = Color.green;
Handles.SphereHandleCap(0,
gameObject.transform.position +new Vector3(0, 5, 0),
gameObject.transform.rotation,
cylinderSize, EventType.Repaint);
}
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
cylinderSize = EditorGUILayout.FloatField(cylinderSize);
}
}
效果如下:
官网对此类已经做了详细说明
我只附上一些效果做一下笔记
Handles.PositionHandle 位置控制柄
Handles.RotationHandle 旋转控制柄
Handles.ScaleHandle 缩放控制柄
Handles.RadiusHandle 半径控制柄
还有其它绘制图形,查看官网就可以了