Страница 1 из 1

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

СообщениеДобавлено: 23 окт 2012, 20:38
AM-Games
Необходимо:
-знание интерфейса программы;
-хоть какое-то знание 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

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

СообщениеДобавлено: 19 ноя 2012, 22:02
AM-Games
Может хоть кто-нибудь напишет, помог ему урок или нет? Может где-то ошибка?

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

СообщениеДобавлено: 19 ноя 2012, 22:11
lol
Вставь скрин результа - самого взрыва. Также неплохо бы сделать минимальный проект юнити с этим уроком.

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

СообщениеДобавлено: 26 ноя 2012, 07:18
DanielC
Помог, спасибо за урок :D

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

СообщениеДобавлено: 15 дек 2012, 20:40
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 в массиве из радиусов) как он работает?

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

СообщениеДобавлено: 15 дек 2012, 22:00
seaman
В шарпе это записывается слегка яснее:
Синтаксис:
Используется csharp
foreach(Collider hit in colliders )

Т.е. для каждого коллайдера из массива colliders выполняем нечто. При этом очередной элемент массива присваивается переменной hit.
http://msdn.microsoft.com/ru-ru/library/ttw7t8t6.aspx

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

СообщениеДобавлено: 16 дек 2012, 17:06
AM-Games
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 и выполняет действие, записанное в цикле.

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

СообщениеДобавлено: 18 дек 2012, 10:27
DanielC
Ясно, спасибо.

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

СообщениеДобавлено: 04 июл 2013, 14:31
Musya1453
Спасибо Автору очень помог. :-bd