Найти тему

Unity 2D. Ruby's Adventure. Part 24

У нас осталась одна небольшая проблема - если вы заставите Ruby бросить шестеренку, и она ни с чем не столкнется, то шестеренка вылетит за пределы игровой сцены и будет лететь бесконечно! По ходу игры это может привести к проблемам с производительностью, если вдруг у вас 500 шестерёнок выйдут за пределы игровой сцены.

Чтобы исправить это, нужно просто проверить расстояние шестеренки от центра игрового мира. Если это расстояние станет слишком большое, например, больше 100 для нашей игры, то нужно уничтожить игровой объект шестеренки.

Добавим эту проверку в метод Update в скрипте Projectile:

void Update()

{

if(transform.position.magnitude > 100.0f)

{

Destroy(gameObject);

}

}

Как мы уже говорили, положение можно рассматривать как вектор, начало которого находится в центре игрового мира, а конец вектора в центре игрового объекта шестеренки. Таким образом длина этого вектора, которая вычисляется при помощи метода magnitude, это есть расстояние шестеренки от центра игрового мира.

Есть и другие способы исправить проблему с обилием уже ненужных игровых объектов на сцене, в зависимости от игры. Например, можно получить расстояние между центром игрового мира и центром ненужного игрового объекта с помощью метода Vector3.Distance (a,b), где a и b - это позиции центров объектов.

Или можно использовать таймер в скрипте Projectile, по истечении которого нужно удалить шестеренку.

Проверьте скрипт:

Скрипт объекта
Скрипт объекта

Сохраните скрипт и запустите игру. Как проверить, уничтожается ли объект шестеренки, когда дистанция между ними центром игрового мира становится больше 100? Для этого запустите игру, заставьте Ruby выпустить шестеренку и выберите ее в окне иерархии. Подождите, пока шестеренка отлетит достаточно далеко, тогда она просто пропадет из окна иерархии.