Я пытаюсь создать приложение, которое генерирует растровое изображение каждый кадр на основе действий пользователя и позволяет отображать это изображение на экране. Мне бы хотелось, чтобы приложение также могло обновлять это изображение в единстве в реальном времени, как только пользователь выполнит другое действие.
Я создал приложение, которое делает это, и оно работает. Тем не менее, это очень медленно. Мой метод Update () прилагается ниже.
Моя идея была:
- Захват данных пользователя (местоположение мыши).
- Преобразование этих данных в специальный формат сигнала, который распознает другая программа.
- Пусть эта программа вернет растровое изображение.
- Используйте это растровое изображение в качестве текстуры и обновите существующую текстуру новым изображением.
Код:
UnityEngine.Texture2D oneTexture;
Bitmap currentBitmap;
private int frameCount = 0;
void Update()
{
// Show mouse position in unity environment
double xValue = Input.mousePosition.x;
double yValue = Screen.height - Input.mousePosition.y;
myPoints = "" + xValue + "," + yValue + Environment.NewLine;
// Show heatmap being recorded.
signals = Program.ConvertStringToSignalsList(myPoints);
currentBitmap = Program.CreateMouseHeatmap(Screen.width, Screen.height, signals);
// Update old heatmap texture.
UpdateTextureFromBitmap();
ri.texture = oneTexture;
ri.rectTransform.sizeDelta = new Vector2(Screen.width, Screen.height);
frameCount++;
// Write points to Database.
StartCoroutine(WriteToDB(xValue, yValue)); // <<<<< Comment out when playback.
}
private void UpdateTextureFromBitmap()
{
// Convert Bitmap object into byte array instead of creating actual
// .bmp image file each frame.
byte[] imageBytes = ImageToBytes(currentBitmap);
BMPLoader loader = new BMPLoader();
BMPImage img = loader.LoadBMP(imageBytes);
// Only initialize the Texture once.
if (frameCount == 0)
{
oneTexture = img.ToTexture2D();
}
else
{
Color32[] imageData = img.imageData;
oneTexture.SetPixels32(imageData);
oneTexture.Apply();
}
}
Мне было интересно, может ли кто-нибудь помочь мне улучшить скорость обновления изображения на экране? Я знаю, что можно сделать эту программу намного быстрее, но я настолько новичок в Unity и C #, что не знаю, как этого добиться. Кроме того, если у меня есть совершенно другой способ сделать это, я тоже открыт для этого. Любая помощь будет оценена. Спасибо!
Также ниже приведен скриншот Профилировщика, показывающий разбивку использования ЦП. В настоящее время каждый кадр занимает около 500 мс.
