美文网首页
[FA] 在场景里创建物体时,自动移除Collider【工具】

[FA] 在场景里创建物体时,自动移除Collider【工具】

作者: _Walker__ | 来源:发表于2024-02-26 11:01 被阅读0次

记录环境

  • Unity 2021.3.31f1

需求

加一个处理工具,让系统创建出来的模型不带碰撞体

背景

美术同学经常会在场景里创建面片Plane,默认创建的3D物体都是带有Collider的。FA中很多3D物体的点击是射线检测Collider实现的,场景中无用的Collider经常会导致点击失效,而美术也经常忽视这个问题,所以提出这个工具需求。

实现

private static void OnObjectChanged(ref ObjectChangeEventStream stream)
{
    if(Application.isPlaying) return;

    for (int i = 0; i < stream.length; ++i)
    {
        switch (stream.GetEventType(i))
        {
            case ObjectChangeKind.CreateGameObjectHierarchy:
                stream.GetCreateGameObjectHierarchyEvent(i, out CreateGameObjectHierarchyEventArgs args);
                GameObject addGo = (GameObject)EditorUtility.InstanceIDToObject(args.instanceId);
                Collider collider = addGo.GetComponent<Collider>();
                if (collider)
                {
                    Object.DestroyImmediate(collider);
                    Debug.Log("主动删除创建物体的Collider:" + addGo.name, addGo);
                }
                break;
        }
    }
}

// 在工程初始化的时候注册事件:[InitializeOnLoad]
ObjectChangeEvents.changesPublished += OnObjectChanged;

这段代码实现的功能是,只要检测到Hierarchy有GameObject创建,就把它的Collider销毁掉。在FA能够满足需求,因为几乎没有什么地方会主动创建带Collider的物体。

如果项目中有主动创建带Collider物体的需要,可以加一些限定条件做过滤,比如:根据当前场景做区分、根据当前编辑状态做区分等。

相关文章

网友评论

      本文标题:[FA] 在场景里创建物体时,自动移除Collider【工具】

      本文链接:https://www.haomeiwen.com/subject/ydjzadtx.html