Реалистичная пыль и вопросы [Решено]

Общие вопросы о Unity3D

Реалистичная пыль и вопросы [Решено]

Сообщение BUDU_KRATOK 06 авг 2010, 13:19

Привет комьюнити! :D

У меня есть пара вопросов:

1. Пытаюсь создать реалистичную пыль, пока в учебных целях.
Фактура материала пыли - как Specular, т.е. в темноте не видна, но на свету отражается.
Никак не могу подобрать такой материал. То остаются чёрные обводы вокруг текстуры (текстура - что-то вроде стандартной текстуры дыма), то перестаёт отсвечивать.
По сути - помогите подобрать настройки, чтобы стандартная текстура дыма в частицах отсвечивала при её освещении.


2. Что-то непонятное с физикой после использования стандартного скрипта DragRigidbody - после того, как отпускаешь - предмет плавно опускается на землю, как будто тонет.

3. Как сделать так, чтобы курсор заменялся на сделанный в GUI прицел по центру? Например, чтобы не на курсор, а на прицел реагировали те же DragRigidbody? Как выключить курсор я знаю.

4. Как передавать значения переменных из различных скриптов? Например в FPSController'е (контроллере движения) у меня булен переменная IsShift, которая показывает бежит игрок или нет. Как в скрипте камеры принимать это значение, чтобы добавить блюр о время бега? :)

5. Как правильно анимировать камеру при ходьбе? Чтобы не передвигался прицел, прилепленый через GUI.

6. Как можно замедлить движение чилд объекта? По типу автомата, прикреплённого к камере и для создания реалистичности нужно замедлить его движение? Ладно, решено :))

Спасибо за помощь :)
Последний раз редактировалось BUDU_KRATOK 13 авг 2010, 13:47, всего редактировалось 13 раз(а).
BUDU_KRATOK
UNец
 
Сообщения: 29
Зарегистрирован: 06 авг 2010, 08:29

Re: Реалистичная пыль

Сообщение Zaicheg 06 авг 2010, 13:26

Как сделать так, чтобы курсор заменялся на сделанный в GUI прицел по центру? Например, чтобы не на курсор, а на прицел реагировали те же DragRigidbody? Как выключить курсор я знаю.

Примерно по этим пунктам пройтись
GUI.DrawTexture
Screen.width, Screen.height
Camera.ScreenPointToRay
Input.mousePosition
Physics.Raycast

Извиняюсь, с DragRigidbody никогда не работал.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Реалистичная пыль

Сообщение BUDU_KRATOK 06 авг 2010, 13:32

Вот код DragRigidBody:
Синтаксис:
Используется javascript
var spring = 50.0;
var damper = 5.0;
var drag = 10.0;
var angularDrag = 5.0;
var distance = 0.2;
var attachToCenterOfMass = false;

private var springJoint : SpringJoint;

function Update ()
{
        // Make sure the user pressed the mouse down
        if (!Input.GetMouseButtonDown (0))
        return;

        var mainCamera = FindCamera();
               
        // We need to actually hit an object
        var hit : RaycastHit;
        if (!Physics.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition),  hit, 100))
                return;
        // We need to hit a rigidbody that is not kinematic
        if (!hit.rigidbody || hit.rigidbody.isKinematic)
                return;
       
        if (!springJoint)
        {
                var go = new GameObject("Rigidbody dragger");
                body = go.AddComponent ("Rigidbody");
                springJoint = go.AddComponent ("SpringJoint");
                body.isKinematic = true;
        }
       
        springJoint.transform.position = hit.point;
        if (attachToCenterOfMass)
        {
                var anchor = transform.TransformDirection(hit.rigidbody.centerOfMass) + hit.rigidbody.transform.position;
                anchor = springJoint.transform.InverseTransformPoint(anchor);
                springJoint.anchor = anchor;
        }
        else
        {
                springJoint.anchor = Vector3.zero;
        }
       
        springJoint.spring = spring;
        springJoint.damper = damper;
        springJoint.maxDistance = distance;
        springJoint.connectedBody = hit.rigidbody;
       
        StartCoroutine ("DragObject", hit.distance);
}

function DragObject (distance : float)
{
        var oldDrag = springJoint.connectedBody.drag;
        var oldAngularDrag = springJoint.connectedBody.angularDrag;
        springJoint.connectedBody.drag = drag;
        springJoint.connectedBody.angularDrag = angularDrag;
        var mainCamera = FindCamera();
        while (Input.GetMouseButton (0))
        {
                var ray = mainCamera.ScreenPointToRay (Input.mousePosition);
                springJoint.transform.position = ray.GetPoint(distance);
                yield;
        }
        if (springJoint.connectedBody)
        {
                springJoint.connectedBody.drag = oldDrag;
                springJoint.connectedBody.angularDrag = oldAngularDrag;
                springJoint.connectedBody = null;
        }
}

function FindCamera ()
{
        if (camera)
                return camera;
        else
                return Camera.main;
}


За подсказку спасибо, посмотрю. А по пыли нет соображений?)


С плавными падениями разобрался - в скрипте есть настройки для этого.. :)



По прицелу пошёл простым путём - переделал mainCamera.ScreenPointToRay (Input.mousePosition); на mainCamera.ScreenPointToRay(Vector3(Screen.width / 2, Screen.height / 2)); Оcталось только сделать смену прицела на значёк руки :)
BUDU_KRATOK
UNец
 
Сообщения: 29
Зарегистрирован: 06 авг 2010, 08:29

Re: Реалистичная пыль [Полурешено]

Сообщение BUDU_KRATOK 06 авг 2010, 15:03

Кстати, как передавать значения переменных из различных скриптов? Например в FPSController'е (контроллере движения) у меня булен переменная IsShift, которая показывает бежит игрок или нет. Как в скрипте камеры принимать это значение, чтобы добавить блюр о время бега? :)
BUDU_KRATOK
UNец
 
Сообщения: 29
Зарегистрирован: 06 авг 2010, 08:29

Re: Реалистичная пыль [Полурешено]

Сообщение Левш@ 06 авг 2010, 16:18

Кстати, как передавать значения переменных из различных скриптов?

Делай переменные статическими, их видно из всех скриптов проекта.
Обращаешься к ним: Имя скрипта.переменная .

static var blaBla = 0; <обьявил статическую переменную в скрипте с именем BlaBla.js>

BlaBla.blaBla = 1; < вызываешь ее из другого скрипта и меняешь значение>

Или:

if (BlaBla.blaBla == 0) <проверяешь значение условием>
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Реалистичная пыль [Полурешено]

Сообщение BUDU_KRATOK 06 авг 2010, 16:27

Да, спасибо, всё работает :)
Идеи по пыли есть?
BUDU_KRATOK
UNец
 
Сообщения: 29
Зарегистрирован: 06 авг 2010, 08:29

Re: Реалистичная пыль [Полурешено]

Сообщение BUDU_KRATOK 06 авг 2010, 17:13

О и кстати, как можно замедлить движение чилд-объекта? Например к камере прикреплен автомат, как сделать так, чтобы он двигался за курсором не рывками а замедленно и плавно? :) Думаю нужно смотреть перемещения и вращения объекта и как-то замедлять их, но.. как?)
BUDU_KRATOK
UNец
 
Сообщения: 29
Зарегистрирован: 06 авг 2010, 08:29

Re: Реалистичная пыль [Полурешено]

Сообщение DbIMok 06 авг 2010, 17:55

правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Реалистичная пыль [Полурешено]

Сообщение BUDU_KRATOK 06 авг 2010, 18:28

Спасибо за пыль)

Пытался анимировать на камере симуляцию ходьбы, получилось криво -как правильно анимировать камеру при ходьбе? Чтобы не передвигался прицел, прилепленый через GUI и другие объекты, прилепленные как чилд.

В туторе что-то было написано про 2 камеры - для оружия и окружения, но этого момента не понял.
BUDU_KRATOK
UNец
 
Сообщения: 29
Зарегистрирован: 06 авг 2010, 08:29

Re: Реалистичная пыль [Почти решено :]

Сообщение Letun 06 авг 2010, 21:26

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

этот вопрос меня тоже интересует, типа блендеровского Slow Parent с выбором времени задержки
Letun
UNец
 
Сообщения: 11
Зарегистрирован: 02 авг 2009, 16:09
Откуда: Западная Сибирь

Re: Реалистичная пыль [Почти решено :]

Сообщение Левш@ 07 авг 2010, 00:41

О и кстати, как можно замедлить движение чилд-объекта? Например к камере прикреплен автомат, как сделать так, чтобы он двигался за курсором не рывками а замедленно и плавно?

Пытался анимировать на камере симуляцию ходьбы, получилось криво -как правильно анимировать камеру при ходьбе? Чтобы не передвигался прицел, прилепленый через GUI и другие объекты, прилепленные как чилд.

Я тоже помучался в унити, потом плюнул и поступил просто:
Создал в максе куб, проанимировал его в ключевой анимации (это просто).
Потом экспортнул куб в унити, назвал его head, сделал дочерним к FPC, а камеру дочерней к нему.
Написал простенький скрипт и получил покачивание головы при ходьбе.
Аналогичное я проделал с weapons. Он дочерний к камере, оружие дочерим к нему.
Получаем покачивание, инерцию, все что угодно при помощи простых анимаций сделанных в максе и простенького скрипта.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Реалистичная пыль [Почти решено :]

Сообщение BUDU_KRATOK 07 авг 2010, 09:47

Эмм.. а зачем заморачиваться с кубами, когда анимацию можно сразу сделать в Юнити прямо на камере. Другое дело как её проигрывать - на камере не нашёл функционала как, скажем, с импортированными анимациями из макса... Если их нет, то да, кубы нужно делать..

В принципе попробую, спасибо! :)
Ну и плюс покачивание оружия, скорее всего это будет самый оптимальный вариант.

А по замедлению чилд объекта есть какие-нибудь идеи? Пока в мыслях только скрипт, тормозящий поворот объекта, но не думаю что это сработает с чилдом..

P.S. Пыль сделал всё-таки свою. Скрин:
Изображение
Пыль медленно появляется и исчезает, ну и медленно опускается. Как раз то, что мне надо)
BUDU_KRATOK
UNец
 
Сообщения: 29
Зарегистрирован: 06 авг 2010, 08:29


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11