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

Unity蜂窝状六边形螺旋环生成问题及代码调试

蜂窝六边形螺旋环生成问题修复

问题根源

你的代码存在两个核心问题导致布局错位、间距不均:

  1. 移动向量与六边形尺寸的关联逻辑错误,HexSide仅基于预制体缩放计算,未匹配正六边形的几何间距规则;
  2. 第4个方向的额外生成逻辑打破了每层6个方向的均匀分布,导致每层六边形数量不是6的倍数,且位置偏移;
  3. 初始中心六边形(第0层)未正确生成。

修复后的代码

using UnityEngine;

public class GenerateHexFloor : MonoBehaviour
{
    public GameObject Hexagon;
    public uint Radius;
    public float HexSideLength = 1f; // 直接指定六边形边长,逻辑更直观

    // 正六边形轴向坐标系的标准移动向量
    private readonly Vector2[] _directionVectors = {
        new Vector2(1, 0),       // 右
        new Vector2(0.5f, 0.866f),// 右上
        new Vector2(-0.5f, 0.866f),// 左上
        new Vector2(-1, 0),      // 左
        new Vector2(-0.5f, -0.866f),// 左下
        new Vector2(0.5f, -0.866f) // 右下
    };

    void Start()
    {
        if (Hexagon.transform.localScale.x != Hexagon.transform.localScale.y)
        {
            Debug.LogError("六边形预制体缩放非均匀,无法生成正确布局,终止执行");
            return;
        }

        // 计算六边形间的实际间距(基于边长)
        float hexSpacing = HexSideLength * 2;
        // 统一预制体缩放,确保边长符合设定
        Hexagon.transform.localScale = Vector3.one * HexSideLength;

        // 生成中心六边形(第0层)
        Instantiate(Hexagon, transform.position, Quaternion.identity, transform).name = "Hex Layer: 0, n: 1";

        Vector2 currentPosition = transform.position;

        for (int layer = 1; layer <= Radius; layer++)
        {
            // 定位当前层起始位置(中心右侧第一个点)
            currentPosition = transform.position + new Vector2(layer * hexSpacing, 0);
            int hexCount = 0;

            for (int dir = 0; dir < 6; dir++)
            {
                // 每个方向生成layer个六边形,每层总数为6*layer
                for (int i = 0; i < layer; i++)
                {
                    hexCount++;
                    Instantiate(Hexagon, currentPosition, Quaternion.identity, transform).name = $"Hex Layer: {layer}, n: {hexCount}";
                    currentPosition += _directionVectors[dir] * hexSpacing;
                }
            }
        }
    }
}

关键修复说明

  • 标准坐标系:采用正六边形轴向坐标系的移动向量,确保每个方向的移动距离一致,从根源保证间距均匀;
  • 直观尺寸控制:通过HexSideLength直接指定边长,自动调整预制体缩放,避免缩放与移动逻辑脱节;
  • 数量合规:每层每个方向生成layer个六边形,总数量严格为6*layer,符合6的倍数要求;
  • 中心层补全:单独生成第0层的中心六边形,匹配螺旋环的起始结构。

使用注意事项

  1. 确保六边形预制体为正六边形(宽高比为2:√3,约1:0.866),否则需调整预制体原始尺寸;
  2. HexSideLength直接控制六边形实际边长,无需额外计算缩放倍数,调试更便捷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 03:38:17