U3D自定义

本文介绍了一种在Unity编辑器中使用自定义脚本批量启用或禁用GameObject及其子物体的方法。通过创建一个ScriptableObject并利用Unity的MenuItem属性,实现了菜单栏中新增功能,允许用户通过快捷键Ctrl+Shift+D快速切换选中物体的激活状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
	}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑虾

多情黯叹痴情癫。情癫苦笑多情难

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值