forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Искусственный интеллект (http://forum.boolean.name/forumdisplay.php?f=171)
-   -   Передвижение врагов (http://forum.boolean.name/showthread.php?t=14898)

SaM_ 15.06.2011 19:14

Передвижение врагов
 
Здравствуйте!
По ходу создания незамысловатой игрушечки появилось несколько вопросов, которые я не могу решить сам.

1. Есть такой скрипт:
Код:

{
  if (Input.GetAxis("Vertical"))
      animation.CrossFade ("Run");
  else
      animation.CrossFade ("Idle");
}

Мне надо, что бы во время передвижение врага его анимация была "Run", а когда он стоит, менялась на "Idle". Скрипт к объекту врага я применил, все работает. Вот только анимация с "Run" на "Idle" у Врага переключается, когда передвигается не враг, а игрок.

2. Как сделать, что бы враг, атакующий игрока, обходил препятствия?

Taugeshtu 15.06.2011 19:35

Ответ: Передвижение врагов
 
Цитата:

2. Как сделать, что бы враг, атакующий игрока, обходил препятствия?
А*, или волновой алгоритм, или райкаст для проверки препятствия по пути движения бота. (В порядке ухудшения способа, и в принципе - спадания сложности)
А* и волновой алгоритмы можно нагуглить, их примеров масса, чтобы разобраться; райкаст - в справку юнити загляни, и немного логики надо накрутить.

Цитата:

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

SaM_ 15.06.2011 19:42

Ответ: Передвижение врагов
 
Taugeshtu, спасибо. Можно ли привести пример кода по первому вопросу?

pax 15.06.2011 21:02

Ответ: Передвижение врагов
 
PHP код:

private Vector3 _lastPos;

void Start()
{
  
_lastPos transform.position;
}
...
{
   var 
pos transform.position;
   if (
_lastPos!=pos)
       
animation.CrossFade ("Run");
   else
      
animation.CrossFade ("Idle");
   
_lastPos pos;



SaM_ 15.06.2011 22:47

Ответ: Передвижение врагов
 
Уверен, скрипт рабочий. Но все же выдает ошибку, ссылаясь на первую строчку:

PHP код:

namespace can only contain types and namespace declaration

Не могу понять в чем проблема, и так пробовал:
PHP код:

private Vector3 lastPos

И так:
PHP код:

private var lastPos Vector3

Прошу помочь. :)

pax 15.06.2011 22:51

Ответ: Передвижение врагов
 
Я писал на C# пример. Не люблю js в unity. Возможно на js так правильно:
PHP код:

private _lastPosVector3;

function 
Start()
{
  
_lastPos transform.position;
}
...
{
   var 
pos transform.position;
   if (
_lastPos!=pos)
       
animation.CrossFade ("Run");
   else
      
animation.CrossFade ("Idle");
   
_lastPos pos;



SaM_ 15.06.2011 22:53

Ответ: Передвижение врагов
 
Я в C# копипастил. Странно...

pax 15.06.2011 22:55

Ответ: Передвижение врагов
 
Это не весь скрипт, это та часть, которую вы привели

pax 15.06.2011 22:57

Ответ: Передвижение врагов
 
Попробуйте так:
PHP код:

using UnityEngine;

public class 
MyAnimScript:MonoBehaviour
{
  private 
Vector3 _lastPos;

  
void Start()
  {
    
_lastPos transform.position;
  }

  
void Update()
  {
     var 
pos transform.position;
     if (
_lastPos!=pos)
         
animation.CrossFade ("Run");
     else
        
animation.CrossFade ("Idle");
     
_lastPos pos;
  }



SaM_ 15.06.2011 23:03

Ответ: Передвижение врагов
 
Отлично! Работает. Большое спасибо.

pax 15.06.2011 23:22

Ответ: Передвижение врагов
 
Не за что )


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

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