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

Unity2D LineRenderer地形生成线段长度异常问题求助

节奏游戏地形生成异常问题排查与解决

问题背景

我是一名新手开发者,正在制作一款节奏游戏。通过Timeline在运行时生成音符,同时希望地面也能通过Timeline编辑生成。

实现代码

Terrain数据类

用于存储地形的时间、名称和角度信息:

public int time;
public string name;
public float angle;
public Terrain(int i, string j, float k)
{
    time = i;
    name = j;
    angle = k;
}

地形数据存储

使用字典存储时间轴对应的地形数据:

public Dictionary<int, List<Terrain>> LineTerrainDictionary = new Dictionary<int, List<Terrain>>();

private List<Terrain> Line_TerrainRangeList(int Time, string Name, float Angle)
{
    List<Terrain> notesList = new List<Terrain>();
    notesList.Add(new Terrain(Time, Name, Angle));
    return notesList;
}

LineRenderer地形生成逻辑

在LineGenerator脚本的Start方法中计算点位并生成地形:

{
    point.Add(new Vector3(spawnTransform.position.x, 0, 0));
    for (int count = 1; count < NoteData.instance.LineTerrainDictionary.Count; count++)
    {
        int _initialKey;
        int _nextKey;
        float _tempTime;

        _initialKey = NoteData.instance.LineTerrainDictionary.ElementAt(count - 1).Key;
        _nextKey = NoteData.instance.LineTerrainDictionary.ElementAt(count).Key;

        _tempTime = (float)(_nextKey - _initialKey) / 1000f;

        float _distance = speed * _tempTime;
        float angleRed = Mathf.Deg2Rad * NoteData.instance.LineTerrainDictionary[_nextKey][0].angle;

        if (NoteData.instance.LineTerrainDictionary[_nextKey][0].angle == 0)
        {
            point.Add(point[count - 1] + new Vector3(_distance, 0, 0));
        }
        else if(NoteData.instance.LineTerrainDictionary[_nextKey][0].angle > 0)
        {
            point.Add(point[count - 1] + new Vector3(Mathf.Abs(_distance * Mathf.Cos(angleRed)),Mathf.Abs(_distance * Mathf.Sin(angleRed)),0));
        }
        else if (NoteData.instance.LineTerrainDictionary[_nextKey][0].angle < 0)
        {
            point.Add(point[count - 1] + new Vector3(Mathf.Abs(_distance * Mathf.Cos(angleRed)), _distance * Mathf.Sin(angleRed),0));
        }
    }

    lineRenderer.positionCount = point.Count;
    for (int j = 0; j < point.Count; j++)
    {
        lineRenderer.SetPosition(j, point[j]);
    }
}

问题现象

生成的地形线段部分长度过短或过长,尝试逐块生成时衔接也有问题,改用LineRenderer后仍未解决。

2024.5.9更新:问题解决

通过调试排查逻辑,发现LineGenerator脚本的判断部分中,**应该使用_initialKey而非_nextKey**来获取地形角度数据,修改后地形已能正确生成。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:07:29