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

Unity如何创建按枢轴对象本地空间对齐的网格?

枢轴本地空间对齐网格生成的问题修复

问题核心诱因

现有代码生成的网格始终沿世界坐标轴排布、无法跟随枢轴本地空间对齐,根本原因是代码逻辑中混用了世界空间、本地空间两套坐标计算规则:

  • 网格超过单行数量阈值的分支逻辑中,错误使用了代表世界空间的.position属性,而非代表父对象本地空间的.localPosition
  • 网格的偏移计算没有基于枢轴的本地坐标轴方向,直接在世界坐标系下做距离加法,哪怕枢轴发生旋转/倾斜,网格的延伸方向依然固定绑定世界X/Z轴
  • 旋转赋值环节使用了世界空间的.rotation属性,没有和父级枢轴的本地变换逻辑保持统一

替换后可直接运行的代码

将原方法的全部分支计算逻辑替换为纯本地空间运算,所有坐标计算完全锚定枢轴的本地坐标系,代码如下:

private void createColum()
{
    // 以列表第一个元素作为枢轴参考,提取本地空间的基准位置
    Vector3 pivotLocalBasePos = gridGame[0].localPosition;
    int rowCapacity = Mathf.RoundToInt(limiteFila);

    for (int i = 0; i < gridGame.Count; i++)
    {
        // 直接计算当前元素在网格中的列、行索引,无需零散分支判断
        int currentColumn = i % rowCapacity;
        int currentRow = i / rowCapacity;

        // 完全基于本地空间计算目标位置:列方向沿本地X轴排布,行方向沿本地Z轴排布
        Vector3 targetLocalPos = pivotLocalBasePos 
                                + new Vector3(currentColumn * distX, 0, currentRow * distY);
        
        gridGame[i].localPosition = targetLocalPos;
        // 对齐本地旋转,和枢轴的空间变换保持完全一致
        gridGame[i].localRotation = gridGame[0].localRotation;
    }
}

修复逻辑说明

  • 全流程剔除世界空间属性(.position、.rotation)的调用,所有计算统一使用.localPosition、.localRotation,确保整个网格的空间计算完全落在枢轴对象的本地坐标系框架内
  • 取模、整除的索引计算方式替代原有的零散分支判断,避免原代码中因为分支错位导致的网格位置错乱问题
  • 排布偏移量distX、distY的方向完全跟随枢轴的本地坐标轴,只要枢轴发生旋转、倾斜、缩放,整个网格会同步跟随变换方向,不会再出现固定沿世界轴排布的异常效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 06:15:11