1. 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编辑器脚本的更多相关文章

  1. 定制你的Unity编辑器

    Unity的编辑器可以通过写脚本进行界面定制,包括添加功能菜单,今天写游戏Demo用到了记录一下. 为Unity添加子菜单 示例程序 [AddComponentMenu("Defend Ho ...

  2. [译]如何在Unity编辑器中添加你自己的工具

    在这篇教程中你会学习如何扩展你的Unity3D编辑器,以便在你的项目中更好的使用它.你将会学习如何绘制你自己的gizmo,用代码来实现创建和删除物体,创建编辑器窗口,使用组件,并且允许用户撤销他们所作 ...

  3. 实现Unity编辑器模式下的旋转

    最近在做一个模型展示的项目,我的想法是根据滑动屏幕的x方向差值和Y方向的差值,来根据世界坐标下的X轴和Y轴进行旋转,但是实习时候总是有一些卡顿.在观察unity编辑器下的旋转之后,发现编辑器下的旋转非 ...

  4. 【Unity优化】如何实现Unity编辑器中的协程

    Unity编辑器中何时需要协程 当我们定制Unity编辑器的时候,往往需要启动额外的协程或者线程进行处理.比如当执行一些界面更新的时候,需要大量计算,如果用户在不断修正一个参数,比如从1变化到2,这种 ...

  5. Unity编辑器扩展chapter1

    Unity编辑器扩展chapter1 unity通过提供EditorScript API 的方式为我们提供了方便强大的编辑器扩展途径.学好这一部分可以使我们学会编写一些工具来提高效率,甚至可以自制一些 ...

  6. 【Unity优化】怎样实现Unity编辑器中的协程

    Unity编辑器中何时须要协程 当我们定制Unity编辑器的时候,往往须要启动额外的协程或者线程进行处理.比方当运行一些界面更新的时候,须要大量计算,假设用户在不断修正一个參数,比方从1变化到2.这种 ...

  7. Unity编辑器 - Undo的坑

    Unity编辑器 - Undo的坑 编辑器通过脚本中改变值,Undo.RecordObject可能会无效,应该使用: Undo.RegisterCompleteObjectUndo(Object ob ...

  8. Unity编辑器 - 资源批处理工具基类

    Unity编辑器 - 资源批处理工具基类 经常要对资源进行批处理,很多时候都是一次性的需求,于是弄个通用脚本. 工具是个弹出面板,处理过程有进度条,如下: 如图,子类只需要重写几个方法: using ...

  9. unity编辑器拓展

    [ExecutelnEditMode]     在EditMode下也可以执行脚本,Unity默认情况下,脚本只有运行时被执行,加上此属性后,不运行程序也能执行.与PlayMode不同的是函数不会不停 ...

  10. Unity编辑器的扩展:IMGUI

    IMGUI 介绍 所有关于 Editor 的相关 UI,包括 Inspector.Hierarchy.Window.Game 视图上动态创建的那些半透明 UI.还有 Scene 视图上可添加的辅助显示 ...

随机推荐

  1. K8S部署之kubeadm

    K8S部署笔记 一.集群环境说明 主机名 IP地址 说明 k8s-master01 192.168.1.107 master节点 k8s-master02 192.168.1.108 master节点 ...

  2. leetcode91解码

    解码,dp,注意特殊情况 def numDecodings( s: str) -> int: if len(s) < 1: return 1 if s[0] =='0': return 0 ...

  3. Flink1.10定义UDAGG遇到SQL validation failed. null 问题

    按照以下代码测试定义的UDAGG会一直出现org.apache.flink.table.api.ValidationException: SQL validation failed. null 问题 ...

  4. 莫凡Python 3

    莫凡Python 3 新建模板小书匠 CNN 卷积神经网络 参考资料 https://morvanzhou.github.io/tutorials/machine-learning/keras/2-3 ...

  5. 14.java 中缀表达式转后缀表达式

    思路如下: 1.初始化两个栈,运算符栈和中间结果栈 2.从左至右扫描 3.遇到数时直接压入s2 4.遇到运算符时,比较其与s1栈顶的优先级,有如下几种情况: 1)s1为空或栈顶为"(&quo ...

  6. Windows 分辨率改变引起WPF的适应问题

    系统分辨率变化,全屏WPF的UI出现没更新和白底之类的现象记录. 您可以使用SystemParameters.WorkArea.最初设置MainWindow的MaxHeight. 在MainWindo ...

  7. Java基础——IO基础知识

    字节流可以处理任何类型的数据(图片.MP3.视频等文件),字符流只能处理字符类型(文本文件)的数据.

  8. 给含有关键词的label着色

    给含有关键词的label着色 FineFileType() { let arr = document.querySelectorAll('.el-checkbox__label'); for (let ...

  9. 事务与spring事务

    事务 事务的特性(ACID) 原子性(Atomicity): 标识将事务中所有的操作进行捆绑层一个不可分割的单元格,计对事务所有进行的数据库修改等操作,要么全部执行,要么就是全部失败隔离性(Isola ...

  10. JVM中的GC系统

    什么是GC? GC(Garbage Collection)称之为垃圾回收,在JVM的执行引擎中自带这样的一个GC系统,此系统会按照一定的算法对内存进行监控和垃圾回收. 如何判断哪些对象是垃圾? 1.引 ...