Unity/C# - изменить размер кисти для рисования местности

Я пишу редактор ландшафта во время выполнения для единства и застрял. Сначала я хотел просто нарисовать текстурой местность. Я нашел этот код, и он работал нормально:

СЦЕНАРИЙ: TerrainPainter

void Paint(Vector3 point)
{
    mapX = (int)(((point.x - terrainPosition.x) / terrainData.size.x) * heightmapWidth);
    mapY = (int)(((point.z - terrainPosition.z) / terrainData.size.z) * heigtmapHeight);

    splatmapData[mapY, mapX, 0] = element[0, 0, 0] = 0;
    splatmapData[mapY, mapX, 1] = element[0, 0, 1] = 1;

    terrain.terrainData.SetAlphamaps(mapX, mapY, element);
}

Но теперь я хочу рисовать разными размерами/толщиной. У меня есть еще один скрипт под названием Terrainmodifier, который я использую для подъема и опускания ландшафта. Там у меня есть эти строки для повышения:

СЦЕНАРИЙ: модификатор ландшафта

    public void RaiseTerrain(Terrain terrain, Vector3 location, float effectIncrement)
{
    int offset = areaOfEffectSize / 2;

    //--1--
    Vector3 tempCoord = (location - terrain.GetPosition());
    Vector3 coord;

    coord = new Vector3(
        (tempCoord.x / GetTerrainSize().x),
        (tempCoord.y / GetTerrainSize().y),
        (tempCoord.z / GetTerrainSize().z)
        );

    Vector3 locationInTerrain = new Vector3(coord.x * terrainHeightMapWidth, 0, coord.z * terrainHeightMapHeight);
    // End --1--

    // --2--
    int terX = (int)locationInTerrain.x - offset;
    int terZ = (int)locationInTerrain.z - offset;
    // End --2--

    // --3--
    float[,] heights = targetTerrainData.GetHeights(terX, terZ, areaOfEffectSize, areaOfEffectSize);

    for (int xx = 0; xx < areaOfEffectSize; xx++)
    {
        for (int yy = 0; yy < areaOfEffectSize; yy++)
        {
            heights[xx, yy] += (effectIncrement * Time.smoothDeltaTime);
        }
    }

    targetTerrainData.SetHeights(terX, terZ, heights);
}

Поэтому я подумал, что мог бы использовать это как помощь и передать это. Поэтому я взял GetAlphamaps() вместо GetHeights() и добавил переменную areaOfEffectSize.

СЦЕНАРИЙ: TerrainPainter

    void Paint(Vector3 point)
{

    // --1--
    mapX = (int)(((point.x - terrainPosition.x) / terrainData.size.x) * heightmapWidth);
    mapY = (int)(((point.z - terrainPosition.z) / terrainData.size.z) * heigtmapHeight);
    // End --1--

    // --2--
    int terX = (int)mapX - (areaOfEffectSize / 2);
    int terY = (int)mapY - (areaOfEffectSize / 2);
    // End --2--

    // --3--
    splatmapData = terrainData.GetAlphamaps(terX, terY, areaOfEffectSize, areaOfEffectSize);

    for(int xx = 0; xx < areaOfEffectSize; xx++)
    {
        for (int yy = 0; yy < areaOfEffectSize; yy++)
        {
            splatmapData[yy, xx, 1] = element[0, 0, 1] = 1;
        }
    }
    terrain.terrainData.SetAlphamaps(terX, terY, element);
}

Надеюсь, sb может помочь мне найти мою ошибку. Как я могу изменить размер моей «кисти»?

EDIT: я написал комментарии в коде, чтобы увидеть переданные/связанные строки.


person Perazim    schedule 26.10.2018    source источник
comment
Но это не работает, это немного расплывчато. Пожалуйста, укажите, что вы ожидаете от него, и что он делает.   -  person Palle Due    schedule 26.10.2018
comment
Эй, я хотел изменить размер моей кисти. Поэтому я также создал переменную areaOfEffectSize и использовал GetAlphamaps, потому что в своем Terrainmodifier-Script я использовал GetHeights. Но он по-прежнему рисует с той же толщиной/размером   -  person Perazim    schedule 26.10.2018


Ответы (1)


О, ребята, я сделал глупую ошибку. Решил эту проблему, передав splatmapData в SetAlphamaps -.- Итак, решение:

[..]

        for (int xx = 0; xx < areaOfEffectSize; xx++)
    {
        for (int yy = 0; yy < areaOfEffectSize; yy++)
        {
            splatmapData[yy, xx, 0] = 0;
            splatmapData[yy, xx, 1] = 1;
        }
    }
    terrain.terrainData.SetAlphamaps(terX, terY, splatmapData);
person Perazim    schedule 26.10.2018