forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Уроки (http://forum.boolean.name/forumdisplay.php?f=145)
-   -   Unity3D - давайте повзрываем! (http://forum.boolean.name/showthread.php?t=12683)

pax 17.06.2010 01:40

Unity3D - давайте повзрываем!
 
Давайте по взрываем!
В данной статейке я бы хотел заострить внимание на готовых материалах, которые можно скачать с официального сайта unity3d.com, и в частности пакету Detonator. Но так как времени у меня не так много, то статья будет краткой, и лучше будем задавать вопросы о том, кому что не понятно.
Доступные ресурсы можно скачать по адресу: http://unity3d.com/support/resources/
Пакет Detonator: http://unity3d.com/support/resources...sion-framework

Итак, приступим.
1. Создаем новый проект, так как я рассказывал в прошлой статье.

2. Скачиваем пакет Detonator по приведенной выше ссылке и импортируем в проект. Для этого в меню «Assets» выбираем пункт «Import Package…». Оставляем все галочки и жмем на кнопку «Import»



3. Структура папок проекта должна получиться следующая:

Я нарочно раскрыл папку «Prefab-examples», т.к. мы будем далее ей пользоваться.

4. Создадим сцену из кубиков, так чтобы можно было что-то по взрывать. Не забываем добавлять компонент Rigid Body кубикам, так чтобы они учувствовали в симуляции физики, а не были просто препятствием. У меня получилось примерно так:

Как создать кубики, добавить им компонент Rigid Body – читайте в предыдущей статье.

5. Создадим папку Scripts и в ней создадим новый скрипт C# с названием DetonateIt. И следующим содержанием:

Код:

using UnityEngine;
using System.Collections;

public class DetonateIt : MonoBehaviour
{
    // Данное поле будет содержать экземпляр объекта-взрыва
    // который мы будем посдтавлять на место клика мышкой
    public GameObject explosion;


    // Кроме функции  Update нам ничего не понадобится, так что
    // оставим только ее
    public void Update()
    {
        // По нажатию кнопки R будем восстанавливать сцену, для новых взрывов
        if (Input.GetKeyDown(KeyCode.R))
        {
            // у нас всего одна сцена, имеющая индекс "0"
            Application.LoadLevel(0);
        }

        // Щелкаем мышкой
        if (Input.GetMouseButtonDown(0))
        {
            // Используя свойство camera данного компонента мы получим камеру,
            // привязанную к объекту
            // С помощью камеры спроецируем луч из точки на экране, в которой находится мышька
            Ray mouseRay = camera.ScreenPointToRay(Input.mousePosition);
           
            // переменная, которая будет содержать результат щелчка мышью по сцене
            RaycastHit hit;

            // на основе полученного луча проверяем его пересечение с объектами в сцене,
            // содержащими компонент Collider (кубики содержат по умолчанию Box Collider)
            if (Physics.Raycast(mouseRay, out hit))
            {
                // если попали в геометрию, то создадим в этом месте взрыв
                Instantiate(explosion, hit.point, Quaternion.identity);
            }
        }
    }
}

6. Возвращаемся в Unity и назначаем созданный компонент камере.



7. Как видно из скриншота, у компонента есть поле Explosion, на которое мы должны перетащить один их подготовленных префабов взрывов, которые я показывал выше.



8. Назначаем любой взрыв, запускаем и наслаждаемся )).

Результат можно посмотреть по этой ссылке.


ps: если вы хотите построить проект, то вам сначала нужно сохранить текущую сцену, потом при выборе File->Build Settings... добавить ее в список построения под индексом 0 и нажать кнопку Build? выбрав нужную платформу.

Duskly 11.12.2011 23:37

Ответ: Unity3D - давайте по взрываем!
 
Круто, спс! А как можно сделать вот чтобы ты подъезжаешь на машине и за 10 метров до объекта начинался взрыв. Какой код надо?

pax 11.12.2011 23:49

Ответ: Unity3D - давайте по взрываем!
 
Примерно так:

PHP код:

public class DestroyByDistance MonoBehaviour
{
    public 
float distance 20;
    public 
GameObject explosion;

    private 
Transform _player;

    public 
void Start()
    {
        
_player GameObject.FindGameObjectWithTag("Player").transform;
    }

    public 
void Update()
    {
        if((
_player.position transform.position).magnitude<distance)
        {
            
Destroy(gameObject);
        }
    }

    public 
void OnDestroy()
    {
        if(
explosion!= null)
        {
            
Instantiate(explosiontransform.positiontransform.rotation);
        }
    }



Только не надейтесь, что тут за вас всю игру напишут ;)

Duskly 11.12.2011 23:53

Ответ: Unity3D - давайте по взрываем!
 
("Player")
туда вписать имя машины? или имя обьекта взрыва?

pax 11.12.2011 23:56

Ответ: Unity3D - давайте по взрываем!
 
Если искать по тегу, как я написал, то машине назначить тег Player.

Duskly 12.12.2011 22:30

Ответ: Unity3D - давайте повзрываем!
 
Хочу взорвать сферу, вместо "Player" пишу Sphere (у меня так подписан объект сферы). Назначаю скрипту префаб взрыва и расстояние. Даю скрипт сфере (побывал дать камере и главному герою). И сразу как стартую взрывается объект (сфера).
А иногда просто горит не взрываясь. Вот скрин ошибки:

:SOS:

pax 12.12.2011 22:36

Ответ: Unity3D - давайте повзрываем!
 
Замени строчку
PHP код:

_player GameObject.FindGameObjectWithTag("Player").transform

на
PHP код:

_player GameObject.Find("Имя объекта").transform


Duskly 12.12.2011 22:42

Ответ: Unity3D - давайте повзрываем!
 
Поправил 6 пост.
P.S. в имя объекта я написал Sphere (мне его взорвать надо) и кинул скрипт на сферу.

pax 12.12.2011 22:46

Ответ: Unity3D - давайте повзрываем!
 
Получается, что сфера должна взорвать сама себя, т.к. от себя до себя расстояние ноль. Все правильно.

Duskly 12.12.2011 22:50

Ответ: Unity3D - давайте повзрываем!
 
дада, спс)) врубился. я в имя объекта написал Sphere и и дал скрипт игроку. и когда подхожу к дистанции взрывается сфера и ГГ (мой перс исчезает). И появляется такая ошибка:

pax 12.12.2011 22:51

Ответ: Unity3D - давайте повзрываем!
 
Проблема в том, что скрипт убивает объект, на котором он висит.

Duskly 12.12.2011 22:53

Ответ: Unity3D - давайте повзрываем!
 
Опа, а как мне тогда взорвать объект не повредив себя?

pax 12.12.2011 22:54

Ответ: Unity3D - давайте повзрываем!
 
А если немного подумать? Так сложно понять что код делает?

Duskly 12.12.2011 22:57

Ответ: Unity3D - давайте повзрываем!
 
Написать в имя объекта имя героя и дать скрипт сфере?

Duskly 12.12.2011 22:59

Ответ: Unity3D - давайте повзрываем!
 
Просто понимаешь, я хочу сделать это ради эффекта. То есть ты проходишь и взрывается определенный объект на котором скрипт висит.


Часовой пояс GMT +4, время: 04:48.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot