forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Подскажите как правильно сделать ... (http://forum.boolean.name/showthread.php?t=15170)

Warlock_29A 24.07.2011 16:21

Подскажите как правильно сделать ...
 
Здравствуйте.

Хочу сделать элемент RTS игры перемещение. Т.е. кликаем мышью по terrain и проигралась анимация как например в варкрафте3

http://www.youtube.com/watch?v=4rJwPAEKk_M

Как бы вы делали такое в юнити? Мне достаточно просто теоретической выкладки :)

Так же интересен еще вопрос. Например возьмем тот же варкрафт3, там был такой персонаж как таурен. У него был скилл бить в землю и вызывать ее деформацию, землетрясение. Интересно так же услышать как более правильно сделать такой эффект7

Решение в лоб это алгоритмом воспроизводить деформацию самого террейна через GetHeights и SetHeights, но правильно ли это в плане производительности? Мб. такого эффекта можно добиться какой нибудь анимированной текстурой плюс эффекты.

Извиняюьс за такие дилетанские вопросы :dontknow:

NitE 24.07.2011 16:31

Ответ: Подскажите как правильно сделать ...
 
тауэр = tower = башня
таурен = tauren = то что ты должен был сказать

Warlock_29A 24.07.2011 16:50

Ответ: Подскажите как правильно сделать ...
 
Цитата:

Сообщение от NitE (Сообщение 196648)
тауэр = tower = башня
таурен = tauren = то что ты должен был сказать

Поправил :)

Nex 24.07.2011 17:31

Ответ: Подскажите как правильно сделать ...
 
Цитата:

У него был скилл бить в землю и вызывать ее деформацию, землетрясение. Интересно так же услышать как более правильно сделать такой эффект7
3д модель

Lestar 25.07.2011 22:30

Ответ: Подскажите как правильно сделать ...
 
Перемещение
На террайн вешаем тег "Floor"
PHP код:

Ray _ray;
RaycastHit _hit;
float _speed=20f;
bool _go=false;
void Update()
{
 if (
Input.GetButtonDown("Fire1"))
  {
    
_ray=gameObject.camera.ScreenPointToRay(Input.mousePosition);
     if (
Physics.Raycast(_rayout _hitMathf.Infinity100))
        {
           if (
_hit.collider.tag == "Floor")
             {
               
GameObject _waypoint = new GameObject(); 
                
_waypoint.transform.position=_hit.point;  
                
_go=true;                       
                
animation.Play();                      
              }               
        }
  }
  if(
_go)
  {
     
transform.Translate(Vector3.Normalize(_waypoint.transform.positiontransform.position) * Time.deltaTime _speed);
  }
  if(
transform.position == _waypoint.transform.position)
  {
      
_go=false;
      
animation.Stop();
      
Destroy(_waypoint);
   }


В общих чертах так.Это не рабочий скрипт,это логика.

Warlock_29A 08.08.2011 14:22

Ответ: Подскажите как правильно сделать ...
 
Цитата:

Сообщение от Lestar (Сообщение 196745)
Перемещение
На террайн вешаем тег "Floor"
PHP код:

Ray _ray;
RaycastHit _hit;
float _speed=20f;
bool _go=false;
void Update()
{
 if (
Input.GetButtonDown("Fire1"))
  {
    
_ray=gameObject.camera.ScreenPointToRay(Input.mousePosition);
     if (
Physics.Raycast(_rayout _hitMathf.Infinity100))
        {
           if (
_hit.collider.tag == "Floor")
             {
               
GameObject _waypoint = new GameObject(); 
                
_waypoint.transform.position=_hit.point;  
                
_go=true;                       
                
animation.Play();                      
              }               
        }
  }
  if(
_go)
  {
     
transform.Translate(Vector3.Normalize(_waypoint.transform.positiontransform.position) * Time.deltaTime _speed);
  }
  if(
transform.position == _waypoint.transform.position)
  {
      
_go=false;
      
animation.Stop();
      
Destroy(_waypoint);
   }


В общих чертах так.Это не рабочий скрипт,это логика.

Спасибо за пример. Перемещение сделал. Но вот c визуализацией вайпоинта вопрос остался. Если его делать в виде меша, то все просто. А вот как быть с 2д изображением, да еще анимированным.

Пробовал взять plane, натянул на него текстуру, анимировал ее. Но когда ее ложу по координатам из hit она естественно частично получается в террайне из за того что он не ровный.

Одна из идей думал перевести координаты из hit в координаты террайна и попытаться наложить сверху текстуру. Видел пример с метеоритами которые деформируют террайн.

Lestar 08.08.2011 16:25

Ответ: Подскажите как правильно сделать ...
 
Проверять колизию плайника с террайном и выдвигать плайник из террайна.Или инстансить изначально с дельтой по Y.

Taugeshtu 27.08.2011 15:07

Ответ: Подскажите как правильно сделать ...
 
Цитата:

c визуализацией вайпоинта вопрос остался. Если его делать в виде меша, то все просто. А вот как быть с 2д изображением, да еще анимированным.
Ну, я бы использовал проектор. Если потребуется - покопался бы чуток в шейдере, но имхо - самый простой вариант нанесения картинки на неплоскую поверхность.

P.S.
Деревянную лопатку мне!


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

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