文章目录
更改Unity编辑器(一共就3步)
第一步
第二步
第三步
打开即可,over。
一、拓展Project视图
1.拓展右键菜单
编辑器使用的代码应该仅限于编辑模式下,正式的游戏包不应该包含这些代码。
Unity提供了一个规则:
- 如果属于编辑模式下的代码,需要放在Editor文件夹下;
- 如果属于执行时执行的代码,放在任意非Editor文件夹下;
注:Editor文件夹是在Create->Folder时重命名的,Editor文件夹可以放在任意位置
在Editor文件夹下创建一个C#脚本文件
using UnityEngine;
using UnityEditor;
public class Script_03_01 {
[MenuItem("Assets/My Tools/Tools 1",false,2)] //双引号里为菜单路径
static void MyTools1()
{
Debug.Log(Selection.activeObject.name);
}
[MenuItem("Assets/My Tools/Tools 2", false, 1)] //当需要添加多个菜单时,第三个参数值越小,菜单就越靠前
static void MyTools2()
{
Debug.Log(Selection.activeObject.name);
}
[MenuItem("Assets/My Tools/Tools 3", false, 3)]
static void MyTools3()
{
Debug.Log(Selection.activeObject.name);
}
}
2.创建菜单
与上一方法类似,直接在MenuItem方法中添加路径即可
using UnityEngine;
using UnityEditor;
public class Script_03_02 {
[MenuItem("Assets/Create/My Create/Cube", false, 2)]
static void CreateCube()
{
GameObject.CreatePrimitive(PrimitiveType.Cube);//创建立方体
}
[MenuItem("Assets/Create/My Create/Sphere", false, 1)]
static void CreateSphere()
{
GameObject.CreatePrimitive(PrimitiveType.Sphere);//创建球体
}
}
效果演示
3.拓展布局
当鼠标选中一个资源后,会出现拓展后的click按钮,带你加这个按钮,程序会自动在Console窗口中打印选中的资源名。
using UnityEngine;
using UnityEditor;
public class Script_03_03 {
[InitializeOnLoadMethod]
static void InitializeOnLoadMethod()
{
EditorApplication.projectWindowItemOnGUI = delegate (string guid, Rect selectionRect)
{
//在Project视图中选择一个资源
if (Selection.activeObject && guid == AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(Selection.activeObject)))
{
float width = 50f;
selectionRect.x += (selectionRect.width - width);
selectionRect.y += 2f;
selectionRect.width = width;
GUI.color = Color.yellow;
//点击事件
if (GUI.Button(selectionRect, "click"))
{
Debug.LogFormat("click:{0}", Selection.activeObject.name);
}
GUI.color = Color.white;
}
}; //这有个分号
}
}
5.监听事件
Project视图中的资源比较多,如果不好好规划,资源就会很凌乱。所以我们需要借助程序来约束资源,这可以通过监听资源的创建、删除、移动和保存等事件来实现。
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
public class Script_03_04:UnityEditor.AssetModificationProcessor
{
[InitializeOnLoadMethod]
static void InitializeOnLoadMethod()
{
//全局监听Project视图下的资源是否有变化(删除、移动、添加)
EditorApplication.projectWindowChanged = delegate ()
{
Debug.Log("change");
};
}
//监听“双击鼠标左键,打开资源”事件
public static bool IsOpenForEdit(string assetPath,out string message)
{
message = null;
Debug.LogFormat("assetPath:{0}",assetPath);
//true表示资源可以打开,false表示不允许在Unity中dak该资源
return true;
}
//监听"资源即将被创建"事件
public static void onWillCreateAsset(string path)
{
Debug.LogFormat("path:{0}", path);
}
//监听"资源即将被保存"事件
public static string[] onWillSaveAssets(string[] paths)
{
if(paths!=null)
{
Debug.LogFormat("path:{0}", string.Join(",", paths));
}
return paths;
}
//监听"资源即将被移动"事件
public static AssetMoveResult onWillMoveAsset(string oldPath,string newPath)
{
Debug.LogFormat("from:{0}to:{1}", oldPath, newPath);
//AssetMoveResult.DidMove表示该资源可以移动
return AssetMoveResult.DidMove;
}
//监听"资源即将被删除"事件
public static AssetDeleteResult onWillDeleteAsset(string assetPath,RemoveAssetOptions option)
{
Debug.LogFormat("delete:{0}", assetPath);
//AssetDeleteResult.DidNotDelete 表示该资源可以被删除
return AssetDeleteResult.DidDelete;
}
}
二、拓展Hierarchy视图
Hierarchy视图中出现的都是游戏对象,这些对象之间同样具有一定的关联关系。一般用树状结构来表示对象之间复杂的父子关系。Hierarchy视图中的游戏对象会通过摄像机最终投影在发布的游戏中。
1.拓展菜单
using UnityEngine;
using UnityEditor;
public class Script_03_05
{
[MenuItem("GameObject/My Create/Cube", false, 0)]
static void CreateCube()
{
GameObject.CreatePrimitive(PrimitiveType.Cube); //创建立方体
}
}
2.拓展布局
using UnityEngine;
using UnityEditor;
public class Script_03_06
{
[InitializeOnLoadMethod