Unity编辑器界面扩展——3、Scene场景UI扩展

  大家好,我是阿赵。继续介绍Unity编辑器界面扩展。
  有时候需要在Scene视图绘制一些菜单或者UI操作选项,这里来看看是怎样实现的
  先在Editor文件夹里面创建一个C#文件,比如我这里创建了一个叫做SceneViewUIEditor的文件。
在这里插入图片描述

然后在里面输入以下代码:

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
[InitializeOnLoad]
public class SceneViewUIEditor
{
    static SceneViewUIEditor()
    {
        SceneView.duringSceneGui += OnUISceneGUI;
    }

    static void OnUISceneGUI(SceneView scene)
    {        
        Handles.BeginGUI();
        //这里写入需要在Scene视图显示的UI内容

        Handles.EndGUI();
    }
}

  这段代码很简单,做一个简单的说明:

  1. [InitializeOnLoad]
      保证这个类在读取的时候初始化,
  2. SceneView.duringSceneGui
      添加Scene场景显示UI的方法
  3. OnUISceneGUI
      需要显示的UI内容都写在这个方法里面
  4. 实际的UI内容
      需要显示UI的内容,必须放在Handles.BeginGUI();和Handles.EndGUI();中间
      接下来写入一些之前就介绍过的GUI显示:
    static void OnUISceneGUI(SceneView scene)
    {        
        Handles.BeginGUI();
        //这里写入需要在Scene视图显示的UI内容
        GUILayout.Label("This is a sample label");
        if(GUILayout.Button("Test Button",GUILayout.Width(150),GUILayout.Height(80)))
        {

        }
        GUILayout.BeginArea(new Rect(5, 200, 200, 100));
        GUILayout.BeginHorizontal();
        GUILayout.Label("testLabel");
        GUILayout.TextField("testTextField");
        GUILayout.EndHorizontal();
        GUILayout.EndArea();
        GUI.Box(new Rect(Screen.width/2 - 100, Screen.height/2 - 100, 200, 200), "Test");
        Handles.EndGUI();
}

  和之前写编辑器窗体的时候差不多,所以就不重复说明了,保存一下,回到Unity编辑器里面,就可以看到在Scene视图里面已经绘制出我们想要的内容了:
在这里插入图片描述

  如果不想这些界面一直显示,或者不想运行中显示,或者只想在某些文件夹下的场景内显示,可以在OnUISceneGUI方法里面加点过滤的条件,比如:

if (Application.isPlaying == true)
{
return;
}
string scenePath = UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene().path;
if (!scenePath.Contains(“Assets/UI/scene”))
{
return;
}

  由于这里主要用到了SceneView,在OnUISceneGUI方法也会传入这个SceneView,所以可以去查一下SceneView的对应API,里面有一些方法可以用,和之前介绍的EditorWindow有很多类似的地方,就不重复说明了。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值