Комментарии 13
Так держать
Молодец! Теперь у тебя впереди лежит долгий и тернистый путь через долину, пройдя которую ты сильно изменишься. Главное - ни кого не слушай.
21:9 поддерживается?
У вас определенно имеется чувство прекрасного: подбор цветов, расположение объектов. Тот случай когда первую игру можно сделать коммерческой, если изучить жанр, добавить интересных уровней и механик.
Не стесняйтесь. Мои две первые и единственные игры лишили меня необходимость ходить на обычную работу.
Для оптимизации нужно будет удалять все объекты, выходящие за экран, и использовать более производительные методы.
Для первой игры очень даже неплохо, главное продолжать расти, а не стоять на одном месте.
Пару советов по поводу оптимизации.
Пореже обращаться напрямую к полю
transform.position
объектов, особенно в часто вызываемых методах типаUpdate
или в циклах, т.к. вызывается extern методget_transform_Injected
, что ресурсозатратно. Например, если есть возможность, постарайтесь кэшировать вектор позиции, особенно, если его значение не меняется. К примеру, ваш код ниже
private IEnumerator Spawn()
{
float minPositionY = transform.position.y - _devationPositionY;
float maxPositionY = transform.position.y + _devationPositionY;
while (_isGameOver == false)
{
float positionY = Random.Range(minPositionY, maxPositionY);
_spawnTime = Random.Range(_minDelay, _maxDelay);
var waitForSeconds = new WaitForSeconds(_spawnTime);
GameObject gameObject = Instantiate(_templates[Random.Range(0, _templates.Length)],
new Vector3(transform.position.x, positionY, transform.position.z), Quaternion.identity);
yield return waitForSeconds;
}
}
можно слегка изменить и получить
private IEnumerator Spawn()
{
var spawnPosition = transform.position;
float minPositionY = spawnPosition.y - _devationPositionY;
float maxPositionY = spawnPosition.y + _devationPositionY;
while (_isGameOver == false)
{
float positionY = Random.Range(minPositionY, maxPositionY);
_spawnTime = Random.Range(_minDelay, _maxDelay);
var waitForSeconds = new WaitForSeconds(_spawnTime);
GameObject gameObject = Instantiate(_templates[Random.Range(0, _templates.Length)],
new Vector3(spawnPosition.x, positionY, spawnPosition.z), Quaternion.identity);
yield return waitForSeconds;
}
}
Конкретно в вашем случае прибавка к производительности будет не особо заметна, но когда будете создавать проекты побольше с сотнями объектов, это может дать неплохой баф к скорости.
Вопреки мнению в комментарии другого пользователя
Для оптимизации нужно будет удалять все объекты, выходящие за экран...
много раз создавать и удалять однотипные объекты (например снаряды в шутерах или бомбы и фоновые объекты в вашей игре) методами GameObject.Instantiate
и GameObject.Destroy
не рекомендуется из-за количества создающегося мусора (особенно, если объект с большим количеством полей) и лишней нагрузки на процессов. Рекомендую посмотреть в сторону Пулов Объектов и вместо того, чтобы постоянно создавать и удалать новые объекты, вы создаете определенное их количество в Пуле при старте и при необходимости достаете их из этого пула, а вместо удаления просто делаете объекты неактивными. Если интересно, гляньте статью https://www.kodeco.com/847-object-pooling-in-unity .
"Преждевременная оптимизация - корень всех зол"©
Советы хорошие, не поспоришь. Но в этом конкретном, как и в 99% случаях - производительность страдать не будет, "и так сойдет", но код будет проще. Обычно производительность фиксят в последнюю очередь) Быстрый код плохо читаем. А больший прирост скорости может дать, например, какое-нибудь сжатие ассетов. Или исключение из обработки недвижимых объектов, как в движках физики. Но советы хорошие, повторюсь.
Молодец, движешься в правильном направлении. Рекомендую в первую очередь добавить пул, чтобы не создавать (и я не вижу здесь уничтожение) постоянно объекты. Это простое действие, но очень важное для оптимизации даже на этом этапе
за моими плечами мало игр, тем более дошедших до релиза и проблема чаще всего не в отсутствии технических средств, а в том, чтобы саму игру придумать. Делать что-то простое не хочется, а сложное - бесконечный процесс.
История создания моей первой игры на Unity