|
17.06.2010, 01:40
|
#1
|
Unity/C# кодер
Регистрация: 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? выбрав нужную платформу.
|
(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
|
Оператор ЭВМ
Регистрация: 10.12.2011
Сообщений: 30
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Unity3D - давайте по взрываем!
Круто, спс! А как можно сделать вот чтобы ты подъезжаешь на машине и за 10 метров до объекта начинался взрыв. Какой код надо?
|
(Offline)
|
|
11.12.2011, 23:49
|
#3
|
Unity/C# кодер
Регистрация: 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(explosion, transform.position, transform.rotation); } }
}
Только не надейтесь, что тут за вас всю игру напишут
|
(Offline)
|
|
11.12.2011, 23:53
|
#4
|
Оператор ЭВМ
Регистрация: 10.12.2011
Сообщений: 30
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Unity3D - давайте по взрываем!
("Player")
туда вписать имя машины? или имя обьекта взрыва?
|
(Offline)
|
|
11.12.2011, 23:56
|
#5
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Unity3D - давайте по взрываем!
Если искать по тегу, как я написал, то машине назначить тег Player.
|
(Offline)
|
|
12.12.2011, 22:30
|
#6
|
Оператор ЭВМ
Регистрация: 10.12.2011
Сообщений: 30
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Unity3D - давайте повзрываем!
Хочу взорвать сферу, вместо "Player" пишу Sphere (у меня так подписан объект сферы). Назначаю скрипту префаб взрыва и расстояние. Даю скрипт сфере (побывал дать камере и главному герою). И сразу как стартую взрывается объект (сфера).
А иногда просто горит не взрываясь. Вот скрин ошибки:
|
(Offline)
|
|
12.12.2011, 22:36
|
#7
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Unity3D - давайте повзрываем!
Замени строчку
_player = GameObject.FindGameObjectWithTag("Player").transform;
на
_player = GameObject.Find("Имя объекта").transform;
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.12.2011, 22:42
|
#8
|
Оператор ЭВМ
Регистрация: 10.12.2011
Сообщений: 30
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Unity3D - давайте повзрываем!
Поправил 6 пост.
P.S. в имя объекта я написал Sphere (мне его взорвать надо) и кинул скрипт на сферу.
|
(Offline)
|
|
12.12.2011, 22:46
|
#9
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Unity3D - давайте повзрываем!
Получается, что сфера должна взорвать сама себя, т.к. от себя до себя расстояние ноль. Все правильно.
|
(Offline)
|
|
12.12.2011, 22:50
|
#10
|
Оператор ЭВМ
Регистрация: 10.12.2011
Сообщений: 30
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Unity3D - давайте повзрываем!
дада, спс)) врубился. я в имя объекта написал Sphere и и дал скрипт игроку. и когда подхожу к дистанции взрывается сфера и ГГ (мой перс исчезает). И появляется такая ошибка:
|
(Offline)
|
|
12.12.2011, 22:51
|
#11
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Unity3D - давайте повзрываем!
Проблема в том, что скрипт убивает объект, на котором он висит.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.12.2011, 22:53
|
#12
|
Оператор ЭВМ
Регистрация: 10.12.2011
Сообщений: 30
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Unity3D - давайте повзрываем!
Опа, а как мне тогда взорвать объект не повредив себя?
|
(Offline)
|
|
12.12.2011, 22:54
|
#13
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Unity3D - давайте повзрываем!
А если немного подумать? Так сложно понять что код делает?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.12.2011, 22:57
|
#14
|
Оператор ЭВМ
Регистрация: 10.12.2011
Сообщений: 30
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Unity3D - давайте повзрываем!
Написать в имя объекта имя героя и дать скрипт сфере?
|
(Offline)
|
|
12.12.2011, 22:59
|
#15
|
Оператор ЭВМ
Регистрация: 10.12.2011
Сообщений: 30
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Unity3D - давайте повзрываем!
Просто понимаешь, я хочу сделать это ради эффекта. То есть ты проходишь и взрывается определенный объект на котором скрипт висит.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:37.
|