版权声明:大家好,我是笨笨,笨笨的笨,笨笨的笨,转载请注明出处,谢谢! https://blog.csdn.net/jx520/article/details/83341923
using UnityEngine;
using UnityEditor; //需要引入这个,还有这个脚本要放在Editor文件夹里才会生效
using System;
//ScriptableObject 这个可以不用挂在物体上
public class Jerry_custom : ScriptableObject
{
// 这个字符串是在菜单栏里新建了一个Custom,点开后Useful Tool 然后是[color=#008ef1][color=#000000]EnableDisable Multi,%#h 代表的是ctrl+shift+h 快捷键组合[/color][/color]
public const string MENU_DISABLE_MULTI_GAMEOBJ = "Custom/Useful Tool/Enable or Disable Multi GameObj %#d";//这个是设置选中物体及其子物体的激活状态
public static void EnableODisableChildNote (Transform parent, bool enable)
{
parent.gameObject.active = enable;
for (int i = 0; i < parent.childCount; i++) {
Transform child = parent.GetChild (i);
if (child.childCount != 0) {
EnableODisableChildNote (child, enable);
} else {
child.gameObject.active = enable;
}
}
}
//这个是设置这个命令什么时候可用,只有在选中一个gameobject的时候,这个命令才会生效,也就是只有选中一个或多个物体的时候快捷键才会起作用
[MenuItem(MENU_DISABLE_MULTI_GAMEOBJ, true)]
static bool ValidateSelectEnableODisable ()
{
GameObject[] gos = GetMultiSelectedGameObject () as GameObject[];
if (gos == null) {
return false;
}
if (gos.Length == 0) {
return false;
}
return true;
}
//这个就是执行命令的函数了,找到选中的物体,及其所有子物体,然后设置他们的激活状态,
[MenuItem(MENU_DISABLE_MULTI_GAMEOBJ)]
static void SelectEnableODisable ()
{
GameObject[] gos = GetMultiSelectedGameObject () as GameObject[];
// Undo.RegisterUndo (gos, "EnableODisable GameObject");
bool enable = !gos [0].active;
foreach (GameObject go in gos) {
EnableODisableChildNote (go.transform, enable);
}
}
//返回选中的gameobject
static GameObject[] GetMultiSelectedGameObject ()
{
return Selection.gameObjects;
}
}