Оптимизация Physics2D.Collider2D.DestroyShapesC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Оптимизация Physics2D.Collider2D.DestroyShapes

Сообщение Anonymous »

Добрый день! У меня проблема с оптимизацией в проекте, пользуюсь библиотекой в ​​свободном доступе. https://github.com/Ideefixze/DTerrain с его помощью можно осуществить динамическое разрушение. Работает хорошо, но есть одна проблема. Во время разрушения коллайдеры отключаются и физический движок Unity вызывает Physics2D.Collider2D.DestroyShapes, поскольку коллайдеры можно отключать много одновременно, могут возникнуть просадки. Есть ли способ как-то оптимизировать этот момент?
Скриншот из профайлера:
Профилировщик

Код: Выделить всё

public void UpdateColliders(List pixelData, ITextureSource textureSource)
{
PPU = textureSource.PPU;
Vector2Int textureSize = new Vector2Int(textureSource.Texture.width, textureSource.Texture.height);

if (rects != null) rects.Clear();

List colls = new List(gameObject.GetComponents());

rects = new List();

QuadTreeToRect(pixelData, 0, 0, textureSize.x, textureSize.y);

foreach (BoxCollider2D b in colls)
{
b.enabled = false;
}

foreach (Rect r in rects)
{
Vector2 rColliderOffset = new Vector2(r.x + r.size.x / 2, r.y + r.size.y / 2f);

BoxCollider2D boxC = colls.Find(coll => coll.offset == rColliderOffset && coll.size == r.size);
if (!boxC)
{
AddComponentAsync(rColliderOffset,r.size);
}
else
{
boxC.enabled = true;
}

}

foreach (BoxCollider2D b in colls)
{
if (b.enabled == false)
{
CounterTime.Time += Time.deltaTime * 100;
Destroy(b, CounterTime.Time);
}
}
}
Я закомментировал строку, где коллайдер окончательно уничтожается, оставив только Enabled=false. Форма Physics2D.Collider2D.Destroy все еще появляется. Через профайлер обнаружил, что вызывается мгновенно

Подробнее здесь: https://stackoverflow.com/questions/793 ... troyshapes
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»