这个视频主要介绍了unity编辑器关于EditorWindow、SceneGUI以及点绘制的知识。
EditorWindow的知识很普通,看官方教程就够了。这里不做特别记录。
SceneGUI主要用到了Handles、HandleUtility、GUIUtility这三个类:
1、Handles在教程中用于绘制控制手柄,如下图:
2、HandleUtility在教程中通过HandleUtility.AddDefaultControl(GUIUtility.GetControlID(FocusType.Passive))这样的函数,达到绘图时避免误选择对象的效果。如果想要获得View视图中鼠标从屏幕发出的射线的话还可以用这句HandleUtility.GUIPointToWorldRay(MousePos),MousePos是鼠标在View视图屏幕中的位置。
以下贴出核心类Gatu_VTXPainter_Window:
using UnityEngine;
using UnityEditor;
using System.Collections;
public class Gatu_VTXPainter_Window : EditorWindow
{
#region Variable
GUIStyle boxStyle;
public Vector2 MousePos;
public RaycastHit CurHit;
public bool AllowPainting;
public bool IsPainting;
public float BrushSize = 1f;
public float BrushMinSize = 0.01f;
public float BrushMaxSize = 10f;
public float BrushOpacity = 1f;
public float BrushFalloff = 1f;
public bool ChangingBrushValue;
public GameObject curGO;
public GameObject lastGO;
public Mesh curMesh;
public Color ForeBackgourndColor = Color.white;
#endregion
#region MainMethod
public static void LaunchVertexPainter()
{
var win = EditorWindow.GetWindow<Gatu_VTXPainter_Window>(false, "绘图窗口", true);
win.GenerateStyles();
}
void Update()
{
//Debug.Log("update");
if (AllowPainting)
{
Selection.activeGameObject = null;
}
else
{
curGO = null;
curMesh = null;
lastGO = null;
}
if (CurHit.transform != null)
{
//Debug.L