Падающие бонусы
Урок 13 из 16 курса Игра в Unity: арканоид на Coddy.
Разрушенный кирпич иногда роняет бонус, который падает в сторону ракетки. Выпадет ли он, решает случайный выбор: Random.value — это случайное число с плавающей точкой от 0 до 1, поэтому условие Random.value < 0.15f выполняется примерно 15 раз из 100. Если хранить шанс в поле, его можно настроить, а в тесте установить значение 1, чтобы бонус выпадал каждый раз, или 0, чтобы он не выпадал вовсе.
Какой именно бонус выпадет, решает второй случайный выбор: случайный индекс массива префабов. При использовании целых чисел Random.Range не включает максимальное значение, поэтому Random.Range(0, array.Length) может выбрать любой элемент. Добыча врага:
public GameObject[] loot;
public float lootChance = 0.25f;
void DropLoot()
{
if (Random.value >= lootChance) return;
int pick = Random.Range(0, loot.Length);
Instantiate(loot[pick], transform.position, Quaternion.identity);
}Бонус падает с постоянной скоростью, перемещаясь каждый кадр, и уничтожает себя, оказавшись ниже игровой области, чтобы пропущенные бонусы не скапливались. У его префаба есть кинематический Rigidbody и триггерный коллайдер, поэтому физическая система знает, что он движется, и он сможет определить, когда достигнет ракетки.
Задание
Сложно- В
PowerUpдобавьpublic float fallSpeed = 3fиpublic float bottomY = -9f. ВUpdate()перемещай объект вниз со скоростьюfallSpeedединиц в секунду и уничтожай бонус, когда его координата y становится меньшеbottomY. - В
GameManagerдобавьpublic GameObject[] powerUps(сцена связывает префабы WidePowerUp и MultiPowerUp) иpublic float dropChance = 0.15f. - В
BrickBrokenс вероятностьюdropChanceсоздай случайный объект изpowerUpsтам, где находился кирпич.
Пока что бонусы проходят сквозь платформу: ловить их будем дальше.
Нажми Play, разбивай кирпичи, пока один из них не уронит бонус, затем нажми Check.
Попробуйте сами
using UnityEngine;
public class PowerUp : MonoBehaviour
{
// Последняя глава: бонусы, выпадающие из разбитых кирпичей.
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.