#c# #unity3d
#c# #unity3d
Вопрос:
Приведенные ниже коды генерируют 10000 кубов (с использованием gizmos). Я застрял на том, как еще больше расширить код и использовать gizmos для иллюстрации процесса сортировки (перемещение кубов при нажатии кнопки мыши), признателен, если вы можете дать мне подсказку о том, как это сделать. использование UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
int x;
int y;
int z;
int[,] array1 = new int[100, 100];
int temp;
void Start()
{
for (x = 0; x < 100; x )
{
for (y = 0; y < 100; y )
{
array1[x, y] = Random.Range(0, 2);
Debug.Log(string.Format("{0},{1},{2}", x, y, array1[x, y]));
}
}
}
void OnDrawGizmos()
{
for (x = 0; x < 100; x )
{
for (y = 0; y < 100; y )
{
Vector2 pos1 = new Vector2(0 x, 0 y);
Gizmos.DrawCube(pos1, transform.position);
Gizmos.color = (array1[x, y] == 1) ? Color.black : Color.white;
}
}
}
void OnMouseDown()
{
for (z = 0; z < 100; z )
{
for (x = 0; x < 100; x )
{
for (y = 0; y < 100-z; y )
{
if (array1[x, y] > array1[x, y 1])
temp = array1[x, y];
array1[x 1, y] = array1[x, y];
array1[x, y] = temp;
}
}
}
}
}
Ответ №1:
1. Возможное решение
Я даю ответ в этой части и предлагаю лучшие альтернативы ниже.
Проблема с вашим кодом заключается в том, что сортировка происходит синхронно, в пределах одного кадра. Что вы можете сделать, это переместить код сортировки в Update и немного отсортировать между каждым кадром. Это позволит вызову Gizmos вывести правильное состояние.
2. Вместо этого используйте индикатор выполнения
Вы можете использовать EditorUtility.DisplayProgressBar для отображения индикатора выполнения в редакторе. Поскольку вы используете Gizmos, которые не отображаются в сборке, это решение предполагает, что вы работаете в редакторе.
3. Используйте вычислительные буферы
В CatLikeCoding есть эта фантастическая статья об использовании вычислительных шейдеров для рисования графика в высоком разрешении. Вы можете следить за ним и отображать ход сортировки в очень высоком разрешении. Кроме того, это будет работать как в редакторе, так и во время выполнения.