Главная » Статьи » 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 | |