四.場景視圖拓展
建立兩個檔案夾Script,Editor,将我們的腳本都放在Script裡,建立一個腳本ChangeObjInfor,再建立一個腳本SceneEditor
讓SceneEditor繼承Editor類,在這裡,我們要使用Editor類,就必須把腳本放在Editor檔案夾中,才能驅動這個腳本。
引用一下Editor的命名空間UnityEditor,我們需要在Scene場景中繪制一個UI,需要使用OnSceneUI的方法
private void OnSceneGUI()
{
Handles.BeginGUI();//開始繪制GUI
GUILayout.BeginArea(new Rect(0, 0, 150, 200));//繪制GUI的顯示區域
GUILayout.Label("選擇顔色");//添加文字提示
if (GUILayout.Button("黃色"))//添加按鈕
{
}
GUILayout.EndArea();//結束區域
Handles.EndGUI();//結束GUI
}
自定義腳本
[CustomEditor(typeof(ChangeObjInfor))]
自定義完以後,我們得到腳本所挂載的物體目标
Target就是我們腳本所挂載的目标,是在Editor類裡面
ChangeObjInfor theTarget = (ChangeObjInfor)target;
回到場景,我們建立一個Cube,然後把我們的ChangeObjInfor挂載到Cube上,就可以看到Scene場景中有了三個按鈕,當我們點選的時候,就可以輸出相應的Debug。
下面我們真正的修改一下cube的顔色,回到代碼中,我們擷取一下目标的材質
theTarget.GetComponent<Renderer>().sharedMaterial.color = Color.red;
我們也可以在場景中繪制一下Cube的坐标
參數;坐标 要顯示的東西
Handles.Label(theTarget.transform.position, theTarget.name + ":" + theTarget.transform.position.ToString());
現在Scene就顯示坐标了,當我們移動cube,坐标也會改變
五.自定義視窗
在Editor中建立一個腳本MyWindowEditor,繼承EditorWindow,引用命名空間UnityEditor
首先我們在GameObject下繪制一個菜單按鈕
[MenuItem("GameObject/ShowWindow")]
然後我們來繪制,在點選ShowWindow的時候彈出一個視窗
Rect theRect = new Rect(0, 0, 500, 500);//繪制視窗的大小和位置
MyWindowEditor window =(MyWindowEditor) EditorWindow.GetWindowWithRect(typeof(MyWindowEditor), theRect, true, "我的視窗");
//繪制視窗,四個參數:類型,坐标和大小,bool值(控制視窗的類型,視窗有兩種類型,一種是獨立類型一種是頁籤類型,true是獨立視窗),視窗名稱。
window.Show();//顯示視窗
我們可以在視窗裡面繪制我們需要的東西
繪制一個可以啟用的分組
我們還可以在視窗裡面打開系統自帶的通知
繪制兩個按鈕
我們可以再繪制一個關閉視窗的按鈕
窗體裡面常用的函數
private void OnFocus()
{
Debug.Log("視窗被選中");
}
private void OnLostFocus()
{
Debug.Log("視窗失去選中");
}
private void OnHierarchyChange()
{
Debug.Log("層次面闆的對象發生改變");
}
private void OnProjectChange()
{
Debug.Log("項目面闆的對象發生改變");
}
private void OnSelectionChange()
{
foreach (Transform item in Selection.transforms)
{
Debug.Log("被選中的物體是:" + item.name);
}
}
private void OnDestroy()
{
Debug.Log("視窗被關閉了");
}
六.其他擴充
我們在Script中添加一個腳本Test
1.想要實作,當我給一個物體添加Text腳本時,自動添加一個剛體元件
[RequireComponent(typeof(Rigidbody))]
我們這樣添加的Rigidbody是不能删除了,防止了我們的誤操作
如果我們想要挂載其他的元件也是一樣的,隻要在typeof裡加入元件的名字
2.我們還可以把腳本當做元件來快速添加,可以把腳本放在Component裡面
[AddComponentMenu("Script/Test")]
3.元件的右鍵操作
寫一個方法,在方法上面添加
[ContextMenu("測試")]
public void TestMenu()
{
}