unity一键给所有模型添加MeshCollider

这篇具有很好参考价值的文章主要介绍了unity一键给所有模型添加MeshCollider。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当第一人称在场景里漫游时应避免穿模问题,这就需要给第一人称和周边环境模型都添加碰撞器。当场景很大,且形状不规则时,一个个给周边模型手动添加碰撞器很慢且不精准,以下方式能实现一键给场景内所有模型添加精准碰撞MeshCollider。

1.新建脚本AddMeshCollider.cs,代码如下


//EditorWindow类无法打包,注意添加这个判断
#if UNITY_EDITOR

    using UnityEngine;
    using UnityEditor;

    public class AddMeshCollider : EditorWindow
    {
        [MenuItem("Tools/添加移除碰撞体")]

        public static void Open()
        {
            EditorWindow.GetWindow(typeof(AddMeshCollider));
        }
        void OnGUI()
        {
            if (GUILayout.Button("添加碰撞体"))
            {
                Add();
            }

            if (GUILayout.Button("移除碰撞体"))
            {
                Remove();
            }
        }
        public static void Remove()
        {
            //寻找Hierarchy面板下所有的MeshRenderer
            var tArray = Resources.FindObjectsOfTypeAll(typeof(MeshRenderer));
            for (int i = 0; i < tArray.Length; i++)
            {
        
                MeshRenderer t = tArray[i] as MeshRenderer;

                //保存场景修改,或者执行完手动Ctrl+s保存
                Undo.RecordObject(t, t.gameObject.name);

                MeshCollider meshCollider = t.gameObject.GetComponent<MeshCollider>();
                if (meshCollider != null)
                {
                    DestroyImmediate(meshCollider);
                }

                //刷新场景
                EditorUtility.SetDirty(t);
                
            }
            Debug.Log("remove Succed");
        }

        public static void Add()
        {
            //寻找Hierarchy面板下所有的MeshRenderer
            var tArray = Resources.FindObjectsOfTypeAll(typeof(MeshRenderer));

            for (int i = 0; i < tArray.Length; i++)
            {
    
                MeshRenderer t = tArray[i] as MeshRenderer;

                //保存场景修改,或者执行完手动Ctrl+s保存
                Undo.RecordObject(t, t.gameObject.name);

                MeshCollider meshCollider = t.gameObject.GetComponent<MeshCollider>();
                if (meshCollider == null)
                {
                    t.gameObject.AddComponent<MeshCollider>();
                }

                //刷新场景
                EditorUtility.SetDirty(t);
            
                
            }
            Debug.Log("Add Succed");
        }
    }

#endif

2.脚本保存后(不用挂载),导航栏出现Tools选项

点击Tools,出现“添加移除碰撞体”按钮,

点击“添加移除碰撞体”按钮,出现“添加碰撞体”“移除碰撞体”选择面版,根据需求操作。

u3d给所有物体添加碰撞箱,c#,游戏引擎,unity

u3d给所有物体添加碰撞箱,c#,游戏引擎,unity

3.点击“添加碰撞器”按钮

可看到输出“Add Succed”,场景里的物体已经全部都挂载了MeshCollider。

u3d给所有物体添加碰撞箱,c#,游戏引擎,unity

u3d给所有物体添加碰撞箱,c#,游戏引擎,unity

4.注意点

1.MeshCollider十分消耗性能。

2.此操作只会改变当前场景物体,每个场景都要操作一次。

3.此操作会给场景内所有带MeshRrnderer的物体都挂载MeshCollider组件,不需要MeshCollider组件的需要手动删除。或者将不需要/需要挂载MeshCollider的物体通过tag或者其他方法分类,在脚本里添加判断。文章来源地址https://www.toymoban.com/news/detail-858577.html

到了这里,关于unity一键给所有模型添加MeshCollider的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 场景中添加 FBX 模型 | 3D 物体渲染 | 3D 物体材质设置 )

    Unity 中使用的 3D 模型格式为 FBX , 使用如下建模软件 可制作该类型模型 : 3Dmax Maya ZBrush Cinema4D Blender 建模完成后 , 将 3D 模型导出为 FBX ( .fbx ) 格式 即可在 Unity 中使用 ; 在 Project 文件窗口 中的 Asstes 目录 下 , 创建一个模型目录 Models , 将 模型文件直接从文件系统中拖到该目录中

    2023年04月15日
    浏览(77)
  • 【Unity ShaderGraph】| 给模型添加一个 边缘光效果 实战

    前言 本文将使用Unity ShaderGraph制作一个 模型边缘光 的效果,可以直接拿到项目中使用。 对ShaderGraph还不了解的小伙伴可以参考这篇文章:【Unity ShaderGraph】| Shader Graph入门介绍 | 简介 | 配置环境 | 窗口介绍 | 简单案例 下面就开始看一下具体的制作流程,然后自己动手制作一个

    2024年02月08日
    浏览(49)
  • Unity中使用Mixamo为3D模型添加动画(保姆级教程)

    最近在做为Unity的3D人物添加动画,浅浅记录一下操作方法。 打开Unity Hub,点击New Project,然后按照下图步骤操作: 打开项目——GameObject——3D Object——Plane,这一步非必要,如果已有3D场景,可忽略这一步。 点此打开Mixamo 打开Mixamo后进入如下界面,这里有一些3D角色和动画可

    2024年02月07日
    浏览(56)
  • Unity3d C#实现场景编辑/运行模式下3D模型XYZ轴混合一键排序功能(含源码工程)

    在部分场景搭建中需要整齐摆放一些物品(如仓库中的货堆、货架等),因为有交互的操作在单个模型上,每次总是手动拖动模型操作起来也是繁琐和劳累。 在这背景下,我编写了一个在运行或者编辑状态下都可以进行一键排序模型的脚步。方便在场景搭建时,可以快速搭建

    2024年01月17日
    浏览(65)
  • VSCode一键删除所有注释

    打开VSCode的替换页面,快捷键为: Ctl + H 鼠标左击使能正则表达式选项,快捷键为: Alt + R 瞄准全部注释的正则表达式为: /*[sS] */|//. 4. 替换的内容什么都不写, 鼠标左击替换全部, 快捷键为: Ctl + Alt + Enter 如果想删除全部空行,瞄准全部空行的正则表达式为: ^s*(?=r?$)n 同样用空来

    2024年02月05日
    浏览(81)
  • pip一键升级所有包

    当你的电脑安装了太多的包又好久没升级了怎么办? 使用 pip install --upgrade 包名称 一个一个升级太麻烦,下面介绍一种简单快捷的方式. 设置镜像源加快安装速度 由于 Python 服务器在国外,直接按照非常慢,还容易因为网络原因导致安装不成功,所以我们一般会给设置一个国内的镜

    2024年02月04日
    浏览(18)
  • PowerPoint VBA: 一键雅黑——一键将PPT所有内容改为微软雅黑字体

    用Office PowerPoint制作幻灯片时,微软雅黑是一款视觉效果较好的字体,而且所有Office都预置了该字体,不用担心字体未安装的情况。如何一键修改PPT所有内容的字体为“微软雅黑”?这里分享一个VBA小工具。

    2024年02月03日
    浏览(70)
  • 魅族云服务自动一键所有选择图片下载。

    魅族云服务的相册功能,没有一键选择所有的图片,就挺恶心的。魅族不一直提供云相册的服务了,就需要将图片全部下载。之前有大神写过油泼猴的脚本。 今天拿来用,发现用不了。 又在网上查一下了,有npm的开源下载工具。附上码云地址,没用过。https://gitee.com/moreant

    2024年02月08日
    浏览(40)
  • VS Code 一键删除所有注释,仨健格式化全部代码,一键去除行尾空格空白

    1. 打开VSCode的替换页面,快捷键为: Ctl + H 2. 鼠标左击使能正则表达式选项,快捷键为: Alt + R 3. 瞄准全部注释的正则表达式为:       4. 替换的内容什么都不写, 鼠标左击替换全部, 快捷键为: Ctl + Alt + Enter 5. 如果想删除全部空行,瞄准全部空行的正则表达式为: 同样用空来替换全

    2024年02月03日
    浏览(55)
  • Docker高效管理指南:一键清理、停止与删除所有容器和镜像

    在当今Java开发的日常工作中,Docker已经成为一项不可或缺的技术。它不仅提供了便捷的开发和部署方式,还为项目的可移植性和可伸缩性带来了新的可能性。我们熟悉了一些基本的Docker命令,如启动、关闭、删除容器以及删除镜像,以提高开发效率。然而,随着技术的不断发

    2024年02月02日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包