Задать вопрос
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, незнаю, но я нашол ещё одну зависимость - когда все объекты в сцене редактора отключаеш и заново включаеш то тормоза пропадают, но не надолго, со временем буквально в течении минуты тормоза опять появляются.
  • Вопрос задан
  • 388 просмотров
Подписаться 1 Оценить 2 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Разработчик игр на Unity
    13 месяцев
    Далее
  • Академия Эдюсон
    Разработчик игр на Unity + ИИ
    6 месяцев
    Далее
  • Stepik
    PRO C#. Профессия "Разработчик игр на Unity"
    6 месяцев
    Далее
Решения вопроса 2
@Hightlander
Всё очень просто:
Метод с атрибутом "[DrawGizmo(GizmoType.NotInSelectionHierarchy)]" вызывается для каждого невыделенного объекта на сцене. Чем больше объектов - тем чаще он вызывается, что и является причиной тормозов.

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

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

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 250 000 ₽
ITK academy Краснодар
от 80 000 ₽