
вот изображение. это показывает, что я резервирую около 2 ГБ. 2 ГБ для визуальной новеллы!! не могу в это поверить. вот функция рендеринга текста:
Код: Выделить всё
private IEnumerator Build_Fade()
{
int minRange = pre_text_len;
int maxRange = minRange + 1;
byte alphaThreshold = 15;
TMP_TextInfo textInfo = tmpro.textInfo;
Color32[] vertexColors = textInfo.meshInfo[textInfo.characterInfo[0].materialReferenceIndex].colors32;
float[] alphas = new float[textInfo.characterCount];
while (true)
{
float fadeSpeed;
if (hurryup)
{
fadeSpeed = character_per_cycle * 5 * speed * 4f;
}
else fadeSpeed = character_per_cycle * speed * 4f;
for (int i = minRange; i < maxRange; i++ )
{
TMP_CharacterInfo characterInfo = textInfo.characterInfo[i];
if (!characterInfo.isVisible) continue;
int vertexIndex = textInfo.characterInfo[i].vertexIndex;
if(i >= alphas.Length)
{
alphas = new float[textInfo.characterCount];
}
alphas[i] = Mathf.MoveTowards(alphas[i], 255, fadeSpeed);
for (int v = 0; v < 4; v++)
{
vertexColors[characterInfo.vertexIndex + v].a = (byte)alphas[i];
}
if (alphas[i] >= 255)
{
minRange++;
}
}
tmpro.UpdateVertexData(TMP_VertexDataUpdateFlags.Colors32);
bool lastCharacterInvisible = !textInfo.characterInfo[maxRange - 1].isVisible;
try
{
if (alphas[maxRange - 1] > alphaThreshold || lastCharacterInvisible)
{
if (maxRange < textInfo.characterCount)
{
maxRange++;
}
else if (alphas[maxRange - 1] >= 255 || lastCharacterInvisible)
{
DIALOGUE.ConversationManager.userPrompt = true;
break;
}
}
}
catch
{
Clear();
}
yield return new WaitForEndOfFrame();
}
}
Я мало что знаю об использовании памяти и роли GC в C#, поэтому понятия не имею, что делать< /p>
Я использовал профилировщик в Unity, чтобы отслеживать использование памяти, вот результат, проверьте изображение
Подробнее здесь: https://stackoverflow.com/questions/786 ... productivi