Dimusikus
@Dimusikus
Любитель

Почему окно редактора начинает сильно тормозить из-за DrawGizmo?

Здравствуйте уважаемые специалисты.

Я пишу кастомный тайловый рисовальщик. У меня присутствует такой код рисования сетки в экране едитора по размерам тайлов:
[CustomEditor(typeof(GameObject))]
	public class SceneGUITest : Editor
	{		
		[DrawGizmo(GizmoType.NotInSelectionHierarchy)]		
		static void RenderCustomGizmo(Transform objectTransform, GizmoType gizmoType)
		{
			if (isEnabled && isGrid)
			{				
				Gizmos.color = Color.white;				

				Vector3 minGrid = SceneView.currentDrawingSceneView.camera.ScreenPointToRay(new Vector2(0f, 0f)).origin;
				Vector3 maxGrid = SceneView.currentDrawingSceneView.camera.ScreenPointToRay(new Vector2(SceneView.currentDrawingSceneView.camera.pixelWidth, SceneView.currentDrawingSceneView.camera.pixelHeight)).origin;

				for (float i = Mathf.Round(minGrid.x / gridSize.x) * gridSize.x; i < Mathf.Round(maxGrid.x / gridSize.x) * gridSize.x && gridSize.x > 0.05f; i+=gridSize.x)
					Gizmos.DrawLine(new Vector3(i,minGrid.y,0.0f), new Vector3(i,maxGrid.y,0.0f));
				for (float j = Mathf.Round(minGrid.y / gridSize.y) * gridSize.y; j < Mathf.Round(maxGrid.y / gridSize.y) * gridSize.y && gridSize.y > 0.05f; j+=gridSize.y)
					Gizmos.DrawLine(new Vector3(minGrid.x,j,0.0f), new Vector3(maxGrid.x,j,0.0f));
				SceneView.RepaintAll();

			}
		}


Проблема в том что пока нарисованных (объектов)тайлов на сцене немного то тормозов нет, а когда количество где то более двух сот объектов то сам Unity редактор начинает тормозить, как только отключаеш сетку то тормоза резко пропадают. Я не могу понять взаимосвязи количества объектов на сцене от наличия сетки на экране.

Подскажите в чём проблема может быть?

Upd:
Может это и не изза DrawGizmo, незнаю, но я нашол ещё одну зависимость - когда все объекты в сцене редактора отключаеш и заново включаеш то тормоза пропадают, но не надолго, со временем буквально в течении минуты тормоза опять появляются.
  • Вопрос задан
  • 382 просмотра
Решения вопроса 2
@Hightlander
Всё очень просто:
Метод с атрибутом "[DrawGizmo(GizmoType.NotInSelectionHierarchy)]" вызывается для каждого невыделенного объекта на сцене. Чем больше объектов - тем чаще он вызывается, что и является причиной тормозов.

P.S. Пока не нашёл элегантного способа получить единичный вызов метода. Но как вариант - можно создавать объект с флагом HideFlags.HideAndDontSave и отрисовывать через него.
Ответ написан
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Разве в бесплатной версии нет профайлера? Если нет, можете по старинке использовать Stopwatch.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы