Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Уроки

Ответ
 
Опции темы
Старый 17.06.2010, 01:40   #1
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
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? выбрав нужную платформу.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Эти 19 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
Aikon (12.12.2011), Amatsu (13.12.2011), Arles (17.08.2013), Arton (11.07.2010), baton4ik (05.08.2010), den (20.07.2010), Dream (17.06.2010), Duskly (11.12.2011), Fatalix3d (24.06.2010), FireOwl (17.06.2010), Hurrit (21.06.2010), is.SarCasm (11.07.2010), LLI.T.A.L.K.E.R. (27.11.2014), Nex (27.06.2010), Nuprahtor (11.12.2011), Reks888 (20.06.2010), SBJoker (17.06.2010), St_AnGer (16.08.2010), Zer0n (07.07.2010)
Старый 11.12.2011, 23:37   #2
Duskly
Оператор ЭВМ
 
Регистрация: 10.12.2011
Сообщений: 30
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Unity3D - давайте по взрываем!

Круто, спс! А как можно сделать вот чтобы ты подъезжаешь на машине и за 10 метров до объекта начинался взрыв. Какой код надо?
(Offline)
 
Ответить с цитированием
Старый 11.12.2011, 23:49   #3
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Unity3D - давайте по взрываем!

Примерно так:

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);
        }
    }


Только не надейтесь, что тут за вас всю игру напишут
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 11.12.2011, 23:53   #4
Duskly
Оператор ЭВМ
 
Регистрация: 10.12.2011
Сообщений: 30
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Unity3D - давайте по взрываем!

("Player")
туда вписать имя машины? или имя обьекта взрыва?
(Offline)
 
Ответить с цитированием
Старый 11.12.2011, 23:56   #5
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Unity3D - давайте по взрываем!

Если искать по тегу, как я написал, то машине назначить тег Player.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 12.12.2011, 22:30   #6
Duskly
Оператор ЭВМ
 
Регистрация: 10.12.2011
Сообщений: 30
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Unity3D - давайте повзрываем!

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

(Offline)
 
Ответить с цитированием
Старый 12.12.2011, 22:36   #7
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Unity3D - давайте повзрываем!

Замени строчку
_player GameObject.FindGameObjectWithTag("Player").transform
на
_player GameObject.Find("Имя объекта").transform
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Duskly (12.12.2011)
Старый 12.12.2011, 22:42   #8
Duskly
Оператор ЭВМ
 
Регистрация: 10.12.2011
Сообщений: 30
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Unity3D - давайте повзрываем!

Поправил 6 пост.
P.S. в имя объекта я написал Sphere (мне его взорвать надо) и кинул скрипт на сферу.
(Offline)
 
Ответить с цитированием
Старый 12.12.2011, 22:46   #9
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Unity3D - давайте повзрываем!

Получается, что сфера должна взорвать сама себя, т.к. от себя до себя расстояние ноль. Все правильно.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 12.12.2011, 22:50   #10
Duskly
Оператор ЭВМ
 
Регистрация: 10.12.2011
Сообщений: 30
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Unity3D - давайте повзрываем!

дада, спс)) врубился. я в имя объекта написал Sphere и и дал скрипт игроку. и когда подхожу к дистанции взрывается сфера и ГГ (мой перс исчезает). И появляется такая ошибка:
(Offline)
 
Ответить с цитированием
Старый 12.12.2011, 22:51   #11
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Unity3D - давайте повзрываем!

Проблема в том, что скрипт убивает объект, на котором он висит.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
LLI.T.A.L.K.E.R. (27.11.2014)
Старый 12.12.2011, 22:53   #12
Duskly
Оператор ЭВМ
 
Регистрация: 10.12.2011
Сообщений: 30
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Unity3D - давайте повзрываем!

Опа, а как мне тогда взорвать объект не повредив себя?
(Offline)
 
Ответить с цитированием
Старый 12.12.2011, 22:54   #13
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Unity3D - давайте повзрываем!

А если немного подумать? Так сложно понять что код делает?
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
LLI.T.A.L.K.E.R. (27.11.2014)
Старый 12.12.2011, 22:57   #14
Duskly
Оператор ЭВМ
 
Регистрация: 10.12.2011
Сообщений: 30
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Unity3D - давайте повзрываем!

Написать в имя объекта имя героя и дать скрипт сфере?
(Offline)
 
Ответить с цитированием
Старый 12.12.2011, 22:59   #15
Duskly
Оператор ЭВМ
 
Регистрация: 10.12.2011
Сообщений: 30
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Unity3D - давайте повзрываем!

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


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com