Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Замена персонажа на Ragdoll или обломки





Допустим у вас есть вражеский персонаж с ригом и он умирает. Вы можете просто проиграть анимацию смерти и отключить все скрипты, которые обычно отвечают за логику врага. Вам, скорее всего, придётся позаботиться об удалении нескольких скриптов, добавлении некоторой дополнительной логики, чтобы убедиться, что никто не будет атаковать уже мёртвого врага, и о других задачах очистки.

Гораздо лучше будет подход, включающий мгновенное удаление всего персонажа, и замена его созданным экземпляром префаба обломков. Это даёт вам больше возможностей. Вы можете использовать другой материал для мёртвого персонажа, присоединить совершенно другие скрипты, создать экземпляр префаба содержащий объект сломанный на много кусков, чтобы симулировать разбившегося врага, или просто создать экземпляр префаба, содержащий определённую версию персонажа.

Любой из этих вариантов может быть достигнут разовым вызовом Instantiate(). Вам надо просто привязать к нему правильный префаб и всё готово!

Важно помнить, что обломки, которые вы Instantiate() (создаёте их экземпляр), могут быть сделаны из совершенно отличных от оригинала объектов. Например, если у вас есть самолёт, вы можете смоделировать 2 версии. Одна из которых - самолёт, состоящий из одного GameObject с Mesh Renderer и скриптами физики самолёта. Если эта модель будет единым объектом, то игра будет работать быстрее, т.к. вы сможете сделать модель с меньшим количеством треугольников, а ввиду того, что в результате будет меньше объектов, то и рендер будет проходить быстрее. Также, пока ваш самолёт радостно летает вокруг, нет надобности разделять его на части.

Это стандартные шаги, если надо собрать префаб сломанного самолёта:

1. Смоделируйте ваш самолёт с различными деталями в вашем любимом приложении для моделирования

2. Создайте пустую сцену

3. Перетащите модель в пустую сцену

4. Добавьте Rigidbody всем частям, выделив все части и выбрав Component->Physics->Rigidbody

5. Добавьте коллайдеры Box Collider всем частям, выделив их и выбрав Component->Physics->Box Collider

6. Для дополнительного спец-эффекта, добавьте системы похожих на дым частиц в виде дочерних объектов для каждой части.

7. Теперь у вас есть самолёт с множеством раздельных деталей. Они будут падать на землю по законам физики и будут создавать след из частиц, в силу того, что к ним присоединены системы частиц. Нажмите Play для предварительного просмотра того, как ваша модель будет себя вести и проведите все необходимые поправки.

8. Выберите Assets->Create Prefab

9. Перетяните на префаб корневой GameObject, содержащий все части самолёта.

Следующий пример покажет, как эти шаги моделируются в коде.

// JavaScript var wreck: GameObject; // As an example, we turn the game object into a wreck after 3 seconds automaticallyfunction Start () { yield WaitForSeconds(3); KillSelf();} // Calls the fire method when holding down ctrl or mousefunction KillSelf () { // Instantiate the wreck game object at the same position we are at var wreckClone = Instantiate(wreck, transform.position, transform.rotation); // Sometimes we need to carry over some variables from this object // to the wreck wreckClone.GetComponent.<MyScript>().someVariable = GetComponent.<MyScript>().someVariable; // Kill ourselves Destroy(gameObject); // C# public GameObject wreck; // As an example, we turn the game object into a wreck after 3 seconds automaticallyIEnumerator Start() { yield return new WaitForSeconds(3); KillSelf();} // Calls the fire method when holding down ctrl or mousevoid KillSelf () { // Instantiate the wreck game object at the same position we are at GameObject wreckClone = (GameObject) Instantiate(wreck, transform.position, transform.rotation); // Sometimes we need to carry over some variables from this object // to the wreck wreckClone.GetComponent<MyScript>().someVariable = GetComponent<MyScript>().someVariable; // Kill ourselves Destroy(gameObject);} }






Date: 2015-09-24; view: 312; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию