Главная » Статьи » Space Shooter Unity3D

Астероиды и звезды

Займёмся созданием астероидов и звезд. Астроиды будут большего размера, чем звезды. И на нашей сцене будет только определенное количество звезд и астероидов. Создавать мы их будем в скрипте, и в самом начале игры.

Создайте сферу (GameObject -> Create Other -> Sphere), разместите его на одной высоте с шаттлом, сделайте его размеры чуть меньше шаттла, примерно такой:

Назовите его Asteroid. Уберите его подальше, чтобы мы не видели их прямо в игре.

Теперь звезды. Звездами у нас будет не сфера, а точечный свет. Создайте его (GameObject -> Create Other -> Point Light), назовите Star. Но она не видна на нашей сцене, для того, чтобы в игре увидеть свечение выделите Star и инспекторе свойств поставьте галку в Draw Halo. Тоже убираем в сторонку.

Дальше создайте неизвестный ГО (GameObject -> Create Empty), вот он будет заниматься созданием астероидов и звезд. Назовите его GameManager.

Создайте сишарп скрипт, под названием GameManager. В этом скрипте у нас будут 2 переменные starsCount и asteroidsCounts, которые показывают, сколько звезд и астероидов у нас должно быть.

А также 2 переменные в которую мы поместим наши Star и Asteroid.

Вот код:

public GameObject starGameObject;

public int starsCount;

public GameObject asteroidGameObject;

public int asteroidsCounts;

И в методе Start:

for (int i = 0; i < starsCount; i++)

{

GameObject starClone;

starClone = Instantiate(starGameObject) as GameObject;

starClone.transform.position = new Vector3(-351.6443f,0,Random.Range(-211.575f, 182.9035f));

}

for(int i = 0; i < asteroidsCounts; i++)

{

GameObject asteroidClone;

asteroidClone = Instantiate(asteroidGameObject) as GameObject;

asteroidClone.transform.position = new Vector3(Random.Range(-632.5665f,-355.6388f),0,Random.Range(-211.575f, 182.9035f));

}

Вместо моих чисел подставьте свои. А откуда их взять я опишу сейчас.

Расположите астероид в самом левом верхнем углу плоскости и запишите его положение по оси Х и Z. Тоже самое и с левым нижним углом плоскости.

Теперь, чтобы наши астероиды или звезды не появлялись в одной точке мы генерируем их положение вот этим кодом:

starClone.transform.position = new Vector3(-351.6443f,0,Random.Range(-211.575f, 182.9035));

В Random.Range я записал своё первое число по оси Z, сначала в нижней точке, потом в верхней.

Тоже самой и с астероидом:

asteroidClone.transform.position = new Vector3(Random.Range(-632.5665f,-355.6388f),0,Random.Range(-211.575f, 182.9035f));

Почему тут по оси Х тоже стоит Random.Range? Потому что скорость всех астероидов у нас будет одинаковой, если они появятся в одной точке, то будет некрасиво, а у звезд будет разная скорость, даже если они появятся в одной точке, один пойдет вперед, а другой отстанет. Второе число это самая боковая грань плосткости, расположил астероид туда, а первое число - просто отодвинул его влево и получил это число.

Всё со скриптом GameManager мы закончили, может привязать его к ГО GameManager .Теперь дадим скорости.

Создайте два скрипта под названиями Star и Asteroid.

В скрипте Asteroid, в методе Update:

transform.Translate(10,0,0);

if(transform.position.x > 359.1975f)

{

transform.position = new Vector3(-351.6443f,YYYY,Random.Range(-211.575f, 182.9035f));

}

Заметьте YYYY, скопируйте вместо него положение шаттла по оси Y.

Тоже самое в стар? С некоторыми изменениями:

public int starSpeedMinimal;

public int starSpeedMaximal;

private int starSpeed;

void Start()

{

starSpeed = Random.Range(starSpeedMinimal, starSpeedMaximal);

}

void Update ()

{

transform.Translate(starSpeed,0,0);

if(transform.position.x > 359.1975f)

{

transform.position = new Vector3(-351.6443f,YYYY,Random.Range(-211.575f, 182.9035f));

}

}

Здесь тоже есть YYYY. Всё кидайте скрипты на соответсвующие ГО. Установите значения. В GO GameManager  Star Game Object -> Star, Asteroid Game Object -> Asteroid.

Всё можете проверять.


Категория: Space Shooter Unity3D | Добавил: Шаке (09.01.2012)
Просмотров: 3278
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
/>meta http-equiv=