AM-Games: Создание гранаты, частиц, вспышки, физики

Научился сам? Помоги начинающему.

AM-Games: Создание гранаты, частиц, вспышки, физики

Сообщение AM-Games 23 окт 2012, 20:38

Необходимо:
-знание интерфейса программы;
-хоть какое-то знание JavaScript.


В этом уроке:
-скрипт для запуска гранаты;
-скрипт для взрыва гранаты;
-реалистичный визуальный взрыв;
-отталкивание объектов взрывной волной.

Часть 01

1) Для начала создадим новую сцену и наполним её только необходимым содержимым:
http://www.picamatic.com/show/2012/10/2 ... 19x949.PNG

2) Далее создаем три скрипта JavaScript: Launcher, Grenade и Explosion.

3) В скрипт Launcher пишем:

Синтаксис:
Используется javascript
        var projectile : Rigidbody;
        var speed = 20;
       
        function Update()
        {
                if( Input.GetKeyDown( KeyCode.Mouse0 ) )
                {
                        var instantiatedProjectile : Rigidbody = Instantiate( projectile, transform.position, transform.rotation );
                        instantiatedProjectile.velocity = transform.TransformDirection( Vector3( 0, 0, speed ) );
                        Physics.IgnoreCollision( instantiatedProjectile. collider, transform.root.collider );
                }
        }


4) Создайте маленькую сферу и немного вытянем её (не забудьте сменить Sphere Collider на Capsule Collider и добавить компонент Rigidbody массой 0.5):
http://www.picamatic.com/show/2012/10/2 ... 19x951.PNG

5) Создайте префаб Grenade и перетащите на него нашу сферу из окна Hierarhy. Из сцены сферу можно удалить.

6) Далее перетащите скрипт Launcher на Main Camera вашего игрока. На поле Projectile перетащите префаб Grenade:
Изображение
Теперь вы можете запускать сферы, нажимая правую кнопку мыши. Не хватает взрыва.

Часть 2

1) В скрипт Grenade пишем:

Синтаксис:
Используется javascript
var explosion : GameObject;
        var timer = 3;
       
        function Start()
        {
                yield WaitForSeconds(timer);
                var instantiatedExplosion : GameObject = Instantiate(explosion, transform.position, transform.rotation);
                Destroy( gameObject );
        }


2) Создайте новый префаб Explosion.

3) Создайте новую Particle System с названием Smoke.

4) Все настройки поставьте примерно такими:
Изображение

5) Создайте Point Light с названием Light и поставьте следующие настройки (цвет можете изменить):
Изображение

6) Создайте Empty Object с именем Explosion и поместите в него ваши Smoke и Light (не забудьте изменить у них координаты на 0 0 0).

7) Создайте префаб Explosion и перетащите на него ваш объект Explosion (объект можно удалить со сцены).

8) Перетащите скрипт Grenade на префаб Grenade.

9) Выберите префаб и в значение Explosion перетащите ваш префаб Explosion.

10) Скрипт Explosion:

Синтаксис:
Используется javascript
var smoke : ParticleEmitter;
        var fireLight : Light;
        var smokeTime = 1;
        var expRadius = 15.0;
        var expPower = 1200.0;
       
        function Start(){
                var colliders : Collider[] = Physics.OverlapSphere( transform.position, expRadius );
                for( var hit in colliders )
                {
                        if( hit.rigidbody )
                        {
                                hit.rigidbody.AddExplosionForce(expPower, transform.position, expRadius);
                        }
                }
                StopSmoke();
                StopFire();
                Destroy(gameObject, 2);
        }
       
        function StopSmoke(){
                yield WaitForSeconds(smokeTime);
                smoke.emit = false;
        }
       
        function StopFire(){
                yield WaitForSeconds(0.1);
                fireLight.enabled = false;
        }
 

11) Повесьте скрипт на префаб Explosion. Выберите префаб, в поле Smoke поставьте объект Smoke из префаба. Light - аналогично.

Пример демонстрации: создайте 20-30 кубов с компонентом Rigidbody, соберите из них большой куб (поставив их друг на друга). Теперь запустите игру и киньте в эту постройку гранату.
Можете заменить сферу на модель гранаты.

AM-Games
Последний раз редактировалось AM-Games 11 янв 2013, 16:26, всего редактировалось 2 раз(а).
AM-Games
UNIт
 
Сообщения: 139
Зарегистрирован: 21 окт 2012, 11:30

Re: Урок от AM-Games: Создание гранаты, частиц, вспышки, физики

Сообщение AM-Games 19 ноя 2012, 22:02

Может хоть кто-нибудь напишет, помог ему урок или нет? Может где-то ошибка?
AM-Games
UNIт
 
Сообщения: 139
Зарегистрирован: 21 окт 2012, 11:30

Re: Урок от AM-Games: Создание гранаты, частиц, вспышки, физики

Сообщение lol 19 ноя 2012, 22:11

Вставь скрин результа - самого взрыва. Также неплохо бы сделать минимальный проект юнити с этим уроком.
lol
Старожил
 
Сообщения: 508
Зарегистрирован: 15 ноя 2009, 10:48
Откуда: Москва

Re: Урок от AM-Games: Создание гранаты, частиц, вспышки, физики

Сообщение DanielC 26 ноя 2012, 07:18

Помог, спасибо за урок :D
JScript Novice
DanielC
UNец
 
Сообщения: 17
Зарегистрирован: 01 мар 2012, 02:12

Re: Урок от AM-Games: Создание гранаты, частиц, вспышки, физики

Сообщение DanielC 15 дек 2012, 20:40

Помоги понять этот участок кода:
Синтаксис:
Используется javascript
        var colliders : Collider[] = Physics.OverlapSphere( transform.position, 15.0 );
        for( var hit in colliders ) {
                if( hit.rigidbody ) {
                        hit.rigidbody.AddExplosionForce(1200, transform.position, 15.0);
                }
        }

В первой строке объявляется переменная которой присваивается массив из физических тел в радиусе 15 от центра гранаты, а вот дальше конструкция которую я раньше не видел:
for( var hit in colliders ) - если дословно то: для (новой переменной hit в массиве из радиусов) как он работает?
JScript Novice
DanielC
UNец
 
Сообщения: 17
Зарегистрирован: 01 мар 2012, 02:12

Re: Урок от AM-Games: Создание гранаты, частиц, вспышки, физики

Сообщение seaman 15 дек 2012, 22:00

В шарпе это записывается слегка яснее:
Синтаксис:
Используется csharp
foreach(Collider hit in colliders )

Т.е. для каждого коллайдера из массива colliders выполняем нечто. При этом очередной элемент массива присваивается переменной hit.
http://msdn.microsoft.com/ru-ru/library/ttw7t8t6.aspx
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Урок от AM-Games: Создание гранаты, частиц, вспышки, физики

Сообщение AM-Games 16 дек 2012, 17:06

DanielC писал(а):Помоги понять этот участок кода:
Синтаксис:
Используется javascript
        var colliders : Collider[] = Physics.OverlapSphere( transform.position, 15.0 );
        for( var hit in colliders ) {
                if( hit.rigidbody ) {
                        hit.rigidbody.AddExplosionForce(1200, transform.position, 15.0);
                }
        }

В первой строке объявляется переменная которой присваивается массив из физических тел в радиусе 15 от центра гранаты, а вот дальше конструкция которую я раньше не видел:
for( var hit in colliders ) - если дословно то: для (новой переменной hit в массиве из радиусов) как он работает?


Как уже сказал seaman, цикл по очереди называет элементы массива (коллайдеры) переменной hit и выполняет действие, записанное в цикле.
AM-Games
UNIт
 
Сообщения: 139
Зарегистрирован: 21 окт 2012, 11:30

Re: Урок от AM-Games: Создание гранаты, частиц, вспышки, физики

Сообщение DanielC 18 дек 2012, 10:27

Ясно, спасибо.
JScript Novice
DanielC
UNец
 
Сообщения: 17
Зарегистрирован: 01 мар 2012, 02:12

Re: AM-Games: Создание гранаты, частиц, вспышки, физики

Сообщение Musya1453 04 июл 2013, 14:31

Спасибо Автору очень помог. :-bd
Аватара пользователя
Musya1453
UNIт
 
Сообщения: 65
Зарегистрирован: 01 мар 2013, 13:33
Откуда: Симферополь


Вернуться в Уроки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2