You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何移动Mesh Collider?无法直接挂载至house_lvl_4

移动Mesh Collider的可行方案
  • 挂在子物体上调整位置
    不用直接把Mesh Collider加在house_lvl_4上,新建一个空物体作为house_lvl_4的子物体,把Mesh Collider挂到这个子物体上,然后移动子物体的Transform组件就能调整碰撞体的位置,完全不影响原物体的逻辑。

  • 修改Mesh顶点偏移(代码实现)
    如果必须用原物体的Mesh Collider,可以通过代码修改Mesh的顶点数据来实现“移动”碰撞体,示例代码如下:

    using UnityEngine;
    
    public class MoveMeshCollider : MonoBehaviour
    {
        public Vector3 moveOffset; // 在Inspector里设置要移动的偏移量
    
        void Start()
        {
            MeshCollider meshCollider = GetComponent<MeshCollider>();
            if (meshCollider == null || meshCollider.sharedMesh == null)
                return;
    
            // 复制一份Mesh,避免修改原始资源
            Mesh newMesh = Instantiate(meshCollider.sharedMesh);
            Vector3[] vertices = newMesh.vertices;
    
            // 给所有顶点加上偏移量
            for (int i = 0; i < vertices.Length; i++)
            {
                vertices[i] += moveOffset;
            }
    
            newMesh.vertices = vertices;
            newMesh.RecalculateBounds();
            // 重新赋值给碰撞体
            meshCollider.sharedMesh = newMesh;
        }
    }
    

    把这个脚本挂在带Mesh Collider的物体上,在Inspector里设置moveOffset就能移动碰撞体了,注意要复制Mesh,不然会修改原始的Mesh资源。

  • 替换为复合碰撞体
    如果Mesh Collider的移动需求比较灵活,或者原Mesh太复杂,不如直接用多个基础碰撞体(Box Collider、Sphere Collider等)组合成复合碰撞体,每个基础碰撞体都能单独调整位置、大小,适配原物体的碰撞范围,操作起来更直观。

额外提醒:如果物体设置了Static标记,先取消Static才能修改碰撞体或者Transform;如果Mesh Collider勾选了Convex,确保修改后的Mesh依然符合凸面体要求,避免碰撞异常。

内容的提问来源于stack exchange,提问作者123456

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:02:08