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

Unity如何生成圆形渐变衰减图 解决岛屿生成的方形轮廓问题

Unity圆形岛屿FallOff衰减图修复方案

问题根源

现有GenerateFallOffMap函数中使用切比雪夫距离(取x、y轴偏移绝对值的最大值)计算衰减值,该距离计算规则天然生成方形衰减区域,是岛屿轮廓为方形的核心原因。

修复代码

仅需修改GenerateFallOffMap函数中value的计算逻辑,替换为欧几里得距离即可得到圆形衰减效果,修改后的完整代码如下:

public float[,] GenerateFallOffMap(int mapSize)
{
    float[,] fallOffMap = new float[mapSize , mapSize];
    // 欧氏距离最大值归一化系数,正方形地图下对角距离最大值为√2≈1.4142
    float normalizeFactor = Mathf.Sqrt(2);

    for (int x = 0; x < mapSize; x++)
    {
        for (int y = 0; y < mapSize; y++)
        {
            float fallOff_A = x / (float)mapSize * 2 - 1;
            float fallOff_B = y / (float)mapSize * 2 - 1;

            // 替换为欧几里得距离计算,并归一化到0~1区间
            float value = Mathf.Sqrt(fallOff_A * fallOff_A + fallOff_B * fallOff_B) / normalizeFactor;
            fallOffMap[x,y] = Evaluate(value);
        }
    }

    return fallOffMap;
}

// 该函数无需修改,可调整a、b参数控制衰减曲线软硬
static float Evaluate(float value)
{
    float a = 3;
    float b = 2.2f;

    return Mathf.Pow(value, a) / (Mathf.Pow(value, a) + Mathf.Pow(b - b * value, a));
}

效果调整建议

  • 调整Evaluate函数中的a参数:数值越大,岛屿边缘衰减越陡峭,岛屿轮廓越清晰;数值越小,边缘过渡越平缓。
  • 调整Evaluate函数中的b参数:数值越大,岛屿整体面积越大,衰减区域越靠近地图边缘。
  • 若需要更大的岛屿,可在计算value时乘以小于1的缩放系数,例如value = value * 0.8f,即可缩小衰减生效范围。

内容的提问来源于stack exchange,提问作者Filip Studený

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:45:03