Оптимизация производительности Unity 2DC#

Место общения программистов C#
Ответить
Гость
 Оптимизация производительности Unity 2D

Сообщение Гость »

У меня проблемы с производительностью в 2D.
Я не хочу создавать фон наподобие пола дискотеки, каждая шестиугольная часть которого будет соединяться с 6 шестиугольниками, которых она касается, и передавать подать сигнал, если с ними что-то произойдет.
Шестиугольная часть:
Изображение

Но перед этим мне нужно было правильно заспавнить их на месте. После их создания я понял, что мне придется создать тысячи таких частей, чтобы получить большой фон. И мой fps начал резко падать:
Изображение

Каждая шестиугольная часть использует триггеры для соединения с другими частями вокруг. И я полагаю, что именно этот метод подключения вызывает большую часть проблем. Когда я проверил профилировщик, влияние физики было самым большим.
Вот код шестиугольной детали:
`
public class HexagonPart : MonoBehaviour
{Менеджер FloorManager;

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

public GameObject spawnedFrom;

public HexagonPart up;
public HexagonPart down;
public HexagonPart leftUp;
public HexagonPart leftDown;
public HexagonPart rightUp;
public HexagonPart rightDown;

[SerializeField] PolygonCollider2D mainCollider;

public CircleCollider2D colliderUp;
public CircleCollider2D colliderDown;
public CircleCollider2D colliderLeftUp;
public CircleCollider2D colliderLeftDown;
public CircleCollider2D colliderRightUp;
public CircleCollider2D colliderRightDown;

SpriteRenderer spriteRenderer;

private void Awake()
{
spriteRenderer = GetComponent();

up = null;
leftUp = null;
leftDown = null;
down = null;
rightDown = null;
rightUp = null;

colliderUp.enabled = true;
colliderLeftUp.enabled = true;
colliderLeftDown.enabled = true;
colliderDown.enabled = true;
colliderRightDown.enabled = true;
colliderRightUp.enabled = true;

manager = FindObjectOfType();

}

private void Start()
{
manager.parts.Enqueue(this);
}
}
`
Код для коллайдеров соединений (маленьких круговых коллайдеров вокруг шестиугольника):
`
публичный класс HexagonCollider: MonoBehaviour
{
enum Direction
{
Up,
LeftUp,
LeftDown,
Down,
Вправо вниз,
Вправо вверх

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

[SerializeField] Direction direction;

private void OnTriggerEnter2D(Collider2D collision)
{

if (collision is PolygonCollider2D)
{

if (direction == Direction.Up)
transform.parent.GetComponent().up = collision.GetComponent();

if (direction == Direction.LeftUp)
transform.parent.GetComponent().leftUp = collision.GetComponent();

if (direction == Direction.LeftDown)
transform.parent.GetComponent().leftDown = collision.GetComponent();

if (direction == Direction.Down)
transform.parent.GetComponent().down = collision.GetComponent();

if (direction == Direction.RightDown)
transform.parent.GetComponent().rightDown = collision.GetComponent();

if (direction == Direction.RightUp)
transform.parent.GetComponent().rightUp = collision.GetComponent();

GetComponent().enabled = false;
}
}
`
Любая помощь приветствуется.

Подробнее здесь: https://stackoverflow.com/questions/781 ... timization
Ответить

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

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

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

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

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