Unity编辑器脚本
- 1.给选中物体添加碰撞盒
这个是给子物体添加碰撞盒 (根据需求可以自己修改) 脚本放在Editor文件夹下 需要手动选择你需要添加碰撞盒的物体
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine; public class AddBox
{
[MenuItem("Tools/添加碰撞盒")]
private static void SelectionAnchor()
{
GameObject[] objs = Selection.gameObjects;
for (int i = 0; i < objs.Length; i++)
{
if (!objs[i].transform.GetChild(0).gameObject.GetComponent<BoxCollider>())
{
objs[i].transform.GetChild(0).gameObject.AddComponent<BoxCollider>();
} }
}
}
1.1 只需要选择模型的父物体就好了(tag升级版) 需要设置子物体的tag值 目的是给子物体的某一个子物体添加碰撞盒(孙物体)

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine; public class AddBox
{
[MenuItem("Tools/一键添加碰撞盒")]
private static void SelectionAnchor()
{
if (Selection.activeObject )
{
AddCollider((GameObject)Selection.activeObject);
} }
public static void AddCollider(GameObject obj)
{
if (obj.transform.childCount >0)
{
for (int i = 0; i < obj.transform.childCount; i++)
{
Transform child = obj.transform.GetChild(i);
if (child.CompareTag ("JG"))
{
child.GetChild (0).gameObject.AddComponent<MeshCollider>();
} AddCollider(child.gameObject);
}
}
} }
升级版添加
1.2 只需要选择模型的父物体就好了(究极版) 无论多少层级都能加上去
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine; public class AddBox
{
[MenuItem("Tools/一键添加所有碰撞盒")]
private static void SelectionAnchor()
{
if (Selection.activeObject)
{
AddCollider((GameObject)Selection.activeObject);
} }
public static void AddCollider(GameObject obj)
{
if (obj.transform.childCount > 0)
{
for (int i = 0; i < obj.transform.childCount; i++)
{
Transform child = obj.transform.GetChild(i);
if (child.GetComponent <MeshRenderer>())
{
child.gameObject.AddComponent<MeshCollider>();
} AddCollider(child.gameObject);
}
}
} }
2.删除所有碰撞盒(选中父物体就好了)直接一键删除所有碰撞盒 脚本放在Editor文件夹下 记得把注释解开,忘记解了
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine; public class Destory_Box :EditorWindow
{
[MenuItem("Tools/工具:一键清理所有Collider碰撞盒")]
public static void ClearColiderByChild()
{
if (Selection.activeObject)
{
ClearMeshColiderByChild((GameObject)Selection.activeObject);
}
}
public static void ClearMeshColiderByChild(GameObject obj)
{
//1.子物体有Mesh
if (obj.transform.childCount > 0)
{
for (int i = 0; i < obj.transform.childCount; i++)
{
GameObject child = obj.transform.GetChild(i).gameObject;
//MeshCollider meshCollider = child.GetComponent<MeshCollider>();
//if (meshCollider != null)
//{
// DestroyImmediate(meshCollider);
//}
BoxCollider boxCollider = child.GetComponent<BoxCollider>();
if (boxCollider != null)
{
//DestroyImmediate(boxCollider);
Debug.Log(boxCollider.name);
}
ClearMeshColiderByChild(child);
}
}
}
}
二 .unity一键删除MissingScript无效脚本
using UnityEditor;
using UnityEngine; public class DestoryMissingScript
{
[MenuItem("Tools/删除选中物体无效脚本Missing")]
private static void DestoryAnchor()
{
if (Selection.activeObject)
{
DestoryMissing((GameObject)Selection.activeObject);
}
}
public static void DestoryMissing(GameObject obj_)
{
if (obj_ .transform.childCount >0)
{
for (int i = 0; i < obj_.transform.childCount; i++)
{
Transform child = obj_.transform.GetChild(i);
GameObjectUtility.RemoveMonoBehavioursWithMissingScript(child.gameObject);
DestoryMissing(child.gameObject);
}
} }
}
有需要会继续补充
搜索
复制
Unity编辑器脚本的更多相关文章
- 定制你的Unity编辑器
Unity的编辑器可以通过写脚本进行界面定制,包括添加功能菜单,今天写游戏Demo用到了记录一下. 为Unity添加子菜单 示例程序 [AddComponentMenu("Defend Ho ...
- [译]如何在Unity编辑器中添加你自己的工具
在这篇教程中你会学习如何扩展你的Unity3D编辑器,以便在你的项目中更好的使用它.你将会学习如何绘制你自己的gizmo,用代码来实现创建和删除物体,创建编辑器窗口,使用组件,并且允许用户撤销他们所作 ...
- 实现Unity编辑器模式下的旋转
最近在做一个模型展示的项目,我的想法是根据滑动屏幕的x方向差值和Y方向的差值,来根据世界坐标下的X轴和Y轴进行旋转,但是实习时候总是有一些卡顿.在观察unity编辑器下的旋转之后,发现编辑器下的旋转非 ...
- 【Unity优化】如何实现Unity编辑器中的协程
Unity编辑器中何时需要协程 当我们定制Unity编辑器的时候,往往需要启动额外的协程或者线程进行处理.比如当执行一些界面更新的时候,需要大量计算,如果用户在不断修正一个参数,比如从1变化到2,这种 ...
- Unity编辑器扩展chapter1
Unity编辑器扩展chapter1 unity通过提供EditorScript API 的方式为我们提供了方便强大的编辑器扩展途径.学好这一部分可以使我们学会编写一些工具来提高效率,甚至可以自制一些 ...
- 【Unity优化】怎样实现Unity编辑器中的协程
Unity编辑器中何时须要协程 当我们定制Unity编辑器的时候,往往须要启动额外的协程或者线程进行处理.比方当运行一些界面更新的时候,须要大量计算,假设用户在不断修正一个參数,比方从1变化到2.这种 ...
- Unity编辑器 - Undo的坑
Unity编辑器 - Undo的坑 编辑器通过脚本中改变值,Undo.RecordObject可能会无效,应该使用: Undo.RegisterCompleteObjectUndo(Object ob ...
- Unity编辑器 - 资源批处理工具基类
Unity编辑器 - 资源批处理工具基类 经常要对资源进行批处理,很多时候都是一次性的需求,于是弄个通用脚本. 工具是个弹出面板,处理过程有进度条,如下: 如图,子类只需要重写几个方法: using ...
- unity编辑器拓展
[ExecutelnEditMode] 在EditMode下也可以执行脚本,Unity默认情况下,脚本只有运行时被执行,加上此属性后,不运行程序也能执行.与PlayMode不同的是函数不会不停 ...
- Unity编辑器的扩展:IMGUI
IMGUI 介绍 所有关于 Editor 的相关 UI,包括 Inspector.Hierarchy.Window.Game 视图上动态创建的那些半透明 UI.还有 Scene 视图上可添加的辅助显示 ...
随机推荐
- 查看当前linux进程所在的目录
1.通过 ps -ef | grep xxx 查看进程信息 ps -ef | grep rsi 1 2.通过 ll /proc/PID 命令查看进程所在目录位置 ls -l /proc/PID 1 L ...
- DFS略思维题做题记录
洛谷:P4399 [JSOI2008]Blue Mary的职员分配 链接 代码: #include<iostream> using namespace std; int n,x,y,z,A ...
- [WSL-1-Ubuntu]使用oh-my-zsh美化你的WSL(附脚本)
在腾讯云买的那个1c2g的服务器,想用mycat搭建一个mysql cluser,用docker部署了一主一从内存就没了一半,可一主一从没啥作用,起码也得2主2从吧?而且还有HA呢,但内存和钱包不给力 ...
- Java基础学习:5、递归
1.递归:就是方法自己调用自己. public class Test01 { public void test(int n) { if (n > 2) { test(n -1); } Syste ...
- 使用vue渲染大量数据时应该怎么优化?
Object.freeze 适合一些 big data的业务场景.尤其是做管理后台的时候,经常会有一些超大数据量的 table,或者一个含有 n 多数据的图表,这种数据量很大的东西使用起来最明显的感受 ...
- 软件工程日报一——Andriod的安装与配置
建民老师给我们布置了一个编写记事本app的任务,因此需要我们下载andriod studio,下面是我的下载过程 在下载andriod studio之前,需要我们配置Java环境 进入控制面板,输入 ...
- 哲讯科技携手江苏大摩半导体借助SAP ERP打造数字化转型升级
项目启动会2022年10月28日,无锡哲讯科技携手江苏大摩半导体科技有限公司SAP ERP系统实施项目启动大会于江苏大摩的上海总部会议室胜利召开.双方项目组核心成员,共同见证了本次SAP ERP实施项 ...
- ubuntu 的 apt 命令
工作原理 apt 全称 advanced packaging tool 是 ubuntu 下的包管理工具 apt 采用集中式仓储机制来管理软件,有 软件安装包 和 软件安装列表 两部分完成. 使用 a ...
- 1.mysql创建索引
-- 创建一个普通索引(方式①)create index 索引名 ON 表名 (列名(索引键长度) [ASC|DESC]);-- 创建一个普通索引(方式②)alter table 表名 add ind ...
- MinGW、Linux GNU、MSVC编译和链接动态库的分析
这几天研究CMake跨平台项目嘛,用了以下几种编译器: VS2019(MSVC) Linux GNU MinGW 编译之后发现链接动态库发现以下问题: VS2019中如果直接链接CMakeLists. ...