Я не хочу создавать фон наподобие пола дискотеки, каждая шестиугольная часть которого будет соединяться с 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
Мобильная версия