Наведение на цель

Программирование на Юнити.

Re: Наведение на цель

Сообщение crocodile 26 окт 2010, 10:50

Так вот луч-то и не работает. :(
crocodile
UNец
 
Сообщения: 21
Зарегистрирован: 15 окт 2010, 13:05
  • ICQ

Re: Наведение на цель

Сообщение crocodile 26 окт 2010, 20:00

Вобщем я оленевод в немецкой каске! :)
Raycast нужен, а не Linecast.
Код: Выделить всё
   if(Physics.Raycast(transform.position, fwd, hit, layerMask))
   {
      if(hit.transform == target)
      {
         barrelFire.renderer.enabled = true;
      }
      else
      {
         barrelFire.renderer.enabled = false;
      }
   }
crocodile
UNец
 
Сообщения: 21
Зарегистрирован: 15 окт 2010, 13:05
  • ICQ

Re: Наведение на цель

Сообщение crocodile 28 окт 2010, 13:05

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

Код: Выделить всё
var target : Transform;
var range = 2.0;
var gunSpeed = 1.2;
var barrelFire : GameObject;//частицы, огонь из ствола

function Awake()
{
   if(!target)
   {
      target = FindClosestEnemy().transform;
   }
   barrelFire.renderer.enabled = false;
}

function FindClosestEnemy()
{
   var gos : GameObject[];
   gos = GameObject.FindGameObjectsWithTag("enemy");
   var closest : GameObject;

   var distance = Mathf.Infinity;
   var position = transform.position;
   for(var go : GameObject in gos)
   {
      var diff = (go.transform.position - position);
      var curDistance = diff.sqrMagnitude;
      if(curDistance < distance)
      {
         closest = go;
         distance = curDistance;
      }
   }
   return closest;
}

function Update ()
{
   if (target && CanAttackTarget())
   {
      var targetRotation = Quaternion.LookRotation(target.position - transform.position, Vector3.up);
      transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * gunSpeed);
      //Это расчет угла до цели. Вобщем-то не нужен.
      /*var forward = transform.forward;
      var targetDir = target.position - transform.position;
      var angle = Vector3.Angle(targetDir, forward);
      if(angle < 10.0)
      {
         barrelFire.renderer.enabled = true;
      }
      else
      {
      }*/
      
   }
   else
   {
      barrelFire.renderer.enabled = false;
   }
}

function CanAttackTarget()
{
   if(transform.parent.animation.isPlaying)
   {
      return false;
   }

   if(Vector3.Distance(transform.position, target.position) > range)
   {
      barrelFire.renderer.enabled = false;
      target = FindClosestEnemy().transform;
      return false;
   }
   
   var hit : RaycastHit;
   var fwd = transform.TransformDirection (Vector3.forward);

   var layerMask = 1 << 8;

   Debug.DrawRay(transform.position, target.position - transform.position);
   Debug.DrawRay(transform.position, fwd, Color.green);
   
   if(Physics.Raycast(transform.position, fwd, hit, layerMask))
   {
      if(hit.transform == target)
      {
         barrelFire.renderer.enabled = true;
      }
      else
      {
         barrelFire.renderer.enabled = false;
      }
   }
   else
   {
      barrelFire.renderer.enabled = false;
   }
   
   return true;
}
crocodile
UNец
 
Сообщения: 21
Зарегистрирован: 15 окт 2010, 13:05
  • ICQ

Re: Наведение на цель

Сообщение crocodile 28 окт 2010, 13:21

Что интересно, есть анимация ствола. Поделил анимацию в инспекторе. Ствол состоит из 3х объектов. Т.е. группа. Нацепил на нее Animation, присвоил анимацию. Но заставить ее играть не получается. Ни ошибок, ни чего. Просто не играет.
В чем может быть дело?
crocodile
UNец
 
Сообщения: 21
Зарегистрирован: 15 окт 2010, 13:05
  • ICQ

Re: Наведение на цель

Сообщение Pyx 28 окт 2010, 13:26

crocodile писал(а):Что интересно, есть анимация ствола. Поделил анимацию в инспекторе. Ствол состоит из 3х объектов. Т.е. группа. Нацепил на нее Animation, присвоил анимацию. Но заставить ее играть не получается. Ни ошибок, ни чего. Просто не играет.
В чем может быть дело?

Покажите скрипт и скрин испектора с компонентом Animation.
Pyx
 

Re: Наведение на цель

Сообщение crocodile 28 окт 2010, 15:32

var barrel: GameObject;//Сюда назначаю ствол
barrel.animation.Play();//не работает
//transform.parent.animation.Play("fire_barrel"); - работает
В принципе и так хорошо. Сначала пробовал конкретно ствол анимировать.
Но раз не выходит, остановлюсь на анимации всей модели.
Изображение
Здесь анимация на всей турельке.
Изображение
Здесь анимация на стволе.
Изображение
Здесь анимация на модели, поделил ее чтоб кусочек на ствол прикрепить.
Забыл добавить - скрипт вешаю на top_rotate_v. Это башня со стволом.
crocodile
UNец
 
Сообщения: 21
Зарегистрирован: 15 окт 2010, 13:05
  • ICQ

Пред.

Вернуться в Скрипты

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

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