Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 06.04.2021
Сообщений: 17
1

Проблема с отображением альфа карты Terrain в готовом билде

10.08.2023, 15:47. Показов 287. Ответов 0

Author24 — интернет-сервис помощи студентам
Моя проблема заключается в том что в Unity цвета terrian отображаются правильно(смотреть Terrain_1.png), но когда я делаю билд, тогда часть цветов перестают работать(Смотреть Terrain_2.png).

Вот код, который каждый кадр раскрашивает Terrain в зависимости от высоты каждой точки
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
using UnityEngine;
 
public class TerrainLayerControllerTopography : MonoBehaviour
{
    public Terrain terrain;
    public TerrainLayer[] terrainLayers;
 
    private float[,] heights;
    private float[,] heightsOld;
    private float[,,] alphamaps;
    private int mapWidth;
    private int mapHeight;
    private int layerIndex;
    private float height;
    private int degreeСhange;
 
    private void Start()
    {
        mapWidth = terrain.terrainData.alphamapWidth;
        mapHeight = terrain.terrainData.alphamapHeight;
        alphamaps = new float[mapWidth, mapHeight, terrainLayers.Length];
 
        heightsOld = terrain.terrainData.GetHeights(0, 0, terrain.terrainData.heightmapResolution, terrain.terrainData.heightmapResolution);
    }
 
    private void Update()
    {
        DegreeChangeUpdate();
        if (degreeСhange > 1000)
        {
            ColorUpdate();
        }
    }
 
    public void DegreeChangeUpdate()
    {
        degreeСhange = 0;
        heights = terrain.terrainData.GetHeights(0, 0, terrain.terrainData.heightmapResolution, terrain.terrainData.heightmapResolution);
        for (int x = 0; x < mapWidth; x++)
        {
            for (int y = 0; y < mapHeight; y++)
            {
                height = heights[x, y];
                if (Mathf.Abs(height - heightsOld[x, y]) > 0.05f)
                {
                    degreeСhange++;
                }
                heightsOld[x, y] = height;
            }
        }
    }
 
    public void ColorUpdate()
    {
        heights = terrain.terrainData.GetHeights(0, 0, terrain.terrainData.heightmapResolution, terrain.terrainData.heightmapResolution);
        for (int x = 0; x < mapWidth; x++)
        {
            for (int y = 0; y < mapHeight; y++)
            {
                height = heights[x, y];
                if (height <= 0.125f)
                {
                    layerIndex = 0;
                }
                else if (height <= 0.250f)
                {
                    layerIndex = 1;
                }
                else if (height <= 0.375f)
                {
                    layerIndex = 2;
                }
                else if (height <= 0.500f)
                {
                    layerIndex = 3;
                }
                else if (height <= 0.625f)
                {
                    layerIndex = 4;
                }
                else if (height <= 0.750f)
                {
                    layerIndex = 5;
                }
                else if (height <= 0.875f)
                {
                    layerIndex = 6;
                }
                else if (height <= 1f)
                {
                    layerIndex = 7;
                }
 
                if (height <= 0.125f && height > 0.115f)
                {
                    layerIndex = 8;
                }
                else if (height <= 0.250f && height > 0.240f)
                {
                    layerIndex = 8;
                }
                else if (height <= 0.375f && height > 0.365f)
                {
                    layerIndex = 8;
                }
                else if (height <= 0.500f && height > 0.490f)
                {
                    layerIndex = 8;
                }
                else if (height <= 0.625f && height > 0.615f)
                {
                    layerIndex = 8;
                }
                else if (height <= 0.750f && height > 0.740f)
                {
                    layerIndex = 8;
                }
                else if (height <= 0.875f && height > 0.865f)
                {
                    layerIndex = 8;
                }
 
 
                for (int i = 0; i < terrainLayers.Length; i++)
                {
                    if (alphamaps.GetLength(2) <= i)
                    {
                        Debug.LogWarning("Terrain layer index " + i + " exceeds alphamaps array length.");
                        continue;
                    }
 
                    alphamaps[x, y, i] = (layerIndex == i) ? 1f : 0f;
                }
            }
        }
 
        terrain.terrainData.SetAlphamaps(0, 0, alphamaps);
        terrain.Flush();
    }
}
Миниатюры
Проблема с отображением альфа карты Terrain в готовом билде   Проблема с отображением альфа карты Terrain в готовом билде  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.08.2023, 15:47
Ответы с готовыми решениями:

Проблема PNG картинки с альфа отображением
Проблема заключается в отображении картинки в фотошопе. Я импортировал из игрового движка...

Перестал работать свет в готовом билде на телефон
Добрый вечер. К делу В самой юнити все работает, как часы, но когда забилдил проект и установил на...

Проблема при билде программы
Доброго времени суток. Пытаюсь подключить sfml к code::blocks`ам, но возникают проблемы....

Проблема с Альфа Скинами
Люди помогите не знаю, что и делать, делал я когда-то проект, использовал Alpha Skins, все было...

0
10.08.2023, 15:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.08.2023, 15:47
Помогаю со студенческими работами здесь

Проблема с изменением альфа канала в UI
Написан скрипт. При нажатии на кнопку меняется альфа канал. При помощи дебага узнал что он...

Проблема с отображением
Всем здравствуйте. Я совсем недавно, а именно 17 числа скачал Delphi 7. С этого момента начал...

Проблема с отображением HELP
Ребят делал таблицу с помощью циклов все получилось, но над таблицей появились нули,:wall: я нашел...

Проблема с отображением
Проблема вот в чем-при попытке просмотреть формы созданные мной, в браузере, допустим IE, Firefox -...

Проблема с отображением
Ребята как ищменить отображение счетчикаю. Есть счетчик метров. он пишет метрв например вот так 234...

Проблема с отображением на мониторе
Всем привет. Помогите, пожалуйста, решить проблему. При запуске ПК нет отображения на мониторе,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru