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

Unity3D住宅建造系统房间墙角完美适配问题求助

解决Unity住宅建造系统中任意墙角墙体无缝贴合问题

核心问题分析

你当前代码的两个关键错误导致墙体无法贴合:

  1. 轴方向混淆:把墙体的厚度(Ancho=3)赋值给了localScale.y,而Y轴是世界空间的向上方向,这意味着墙体的厚度是垂直于地面的,而非水平方向上垂直于墙体长度,完全不符合实际墙体的结构。
  2. 硬凑长度的错误逻辑:用lengthC + 0.1f来试图填补缝隙,这种硬编码的方式只可能在特定直角场景下临时生效,无法适配任意角度的转角。

解决方案

我们需要让墙体的厚度方向水平垂直于墙体长度,并通过计算转角处的法向量,让相邻墙体在转角处自然衔接。以下是修改后的完整代码:

public LineRenderer line;
public GameObject myCube;
// 墙体参数:厚度(水平方向)、高度(垂直方向)
public float wallThickness = 3f;
public float wallHeight = 10f;

void Update()
{
    if(Input.GetKeyDown(KeyCode.C))
    {
        // 按顺序绘制所有边的墙体
        DrawWall(line.GetPosition(0), line.GetPosition(1));
        DrawWall(line.GetPosition(1), line.GetPosition(2));
        DrawWall(line.GetPosition(2), line.GetPosition(3));
        DrawWall(line.GetPosition(3), line.GetPosition(0));
    }
}

public void DrawWall(Vector3 pointA, Vector3 pointB)
{
    // 1. 计算墙体长度和方向
    Vector3 wallDir = pointB - pointA;
    float wallLength = wallDir.magnitude;
    wallDir.Normalize();

    // 2. 计算墙体厚度方向的法向量(顺时针旋转90度,指向房间内侧,适配点的逆时针排列)
    Vector3 thicknessDir = new Vector3(-wallDir.z, 0, wallDir.x).normalized;

    // 3. 计算墙体的中心位置:边的中点 + 半个厚度的偏移(确保墙体一侧对齐房间边界)
    Vector3 wallCenter = (pointA + pointB) / 2f;
    Vector3 wallPos = wallCenter + thicknessDir * (wallThickness / 2f);

    // 4. 计算墙体旋转:让长度方向对齐wallDir,高度方向保持向上
    Quaternion wallRot = Quaternion.LookRotation(wallDir, Vector3.up);

    // 5. 实例化墙体并设置属性
    Transform wall = Instantiate(myCube, wallPos, wallRot, line.transform.parent).transform;
    // 根据立方体初始轴调整scale:这里假设立方体初始Z轴为长度方向,X为厚度,Y为高度
    wall.localScale = new Vector3(wallThickness, wallHeight, wallLength);
}

关键调整说明

  • 轴方向修正:把墙体厚度移到水平方向(localScale.x),高度保持在Y轴,长度沿Z轴(适配LookRotation的forward方向),确保墙体的厚度是水平垂直于长度方向。
  • 法向量计算:thicknessDir是墙体长度方向顺时针旋转90度的向量,确保所有墙体都向房间内侧偏移半个厚度,这样相邻墙体在转角处的外侧会自然贴合,不管转角是锐角、钝角还是直角。
  • 精准定位:通过边中点加厚度偏移的方式定位墙体,避免硬凑长度的错误,确保每个墙体的边界严格对齐房间的角点连线。

额外优化建议

  • 如果你的房间点是顺时针排列的,把thicknessDir改为new Vector3(wallDir.z, 0, -wallDir.x),确保厚度方向指向房间内侧。
  • 可以加入对零长度边的判断,避免实例化无效墙体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:20:03