Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > Unity > Искусственный интеллект

Ответ
 
Опции темы
Старый 15.06.2011, 19:14   #1
SaM_
ПроЭктировщик
 
Аватар для SaM_
 
Регистрация: 15.06.2011
Сообщений: 111
Написано 2 полезных сообщений
(для 3 пользователей)
Сообщение Передвижение врагов

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

1. Есть такой скрипт:
{
   if (Input.GetAxis("Vertical"))
       animation.CrossFade ("Run");
   else
      animation.CrossFade ("Idle");
}
Мне надо, что бы во время передвижение врага его анимация была "Run", а когда он стоит, менялась на "Idle". Скрипт к объекту врага я применил, все работает. Вот только анимация с "Run" на "Idle" у Врага переключается, когда передвигается не враг, а игрок.

2. Как сделать, что бы враг, атакующий игрока, обходил препятствия?
(Offline)
 
Ответить с цитированием
Старый 15.06.2011, 19:35   #2
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений
(для 2,593 пользователей)
Ответ: Передвижение врагов

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

1. Есть такой скрипт:
Этот скрипт выбирает анимацию исходя из системы ввода, которой пользуется игрок. Для того, чтобы анимации игрались у врагов во время их движения, нужно иметь какой-то внутренний способ определять движение/остановку врага. Можно делать через круп - определять разницу с прошлой координатой, а можно делать через мозг - определять, что нужно врагу сделать, устанавливать переменную-статус, и считывая её значение двигать врага и определять анимацию.
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab.
We LOVE you. We MADE you.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
SaM_ (16.06.2011)
Старый 15.06.2011, 19:42   #3
SaM_
ПроЭктировщик
 
Аватар для SaM_
 
Регистрация: 15.06.2011
Сообщений: 111
Написано 2 полезных сообщений
(для 3 пользователей)
Ответ: Передвижение врагов

Taugeshtu, спасибо. Можно ли привести пример кода по первому вопросу?
(Offline)
 
Ответить с цитированием
Старый 15.06.2011, 21:02   #4
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,512
Написано 2,964 полезных сообщений
(для 5,253 пользователей)
Ответ: Передвижение врагов

private Vector3 _lastPos;

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

__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 15.06.2011, 22:47   #5
SaM_
ПроЭктировщик
 
Аватар для SaM_
 
Регистрация: 15.06.2011
Сообщений: 111
Написано 2 полезных сообщений
(для 3 пользователей)
Смущение Ответ: Передвижение врагов

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

namespace can only contain types and namespace declaration
Не могу понять в чем проблема, и так пробовал:
private Vector3 lastPos
И так:
private var lastPos Vector3
Прошу помочь.
(Offline)
 
Ответить с цитированием
Старый 15.06.2011, 22:51   #6
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,512
Написано 2,964 полезных сообщений
(для 5,253 пользователей)
Ответ: Передвижение врагов

Я писал на C# пример. Не люблю js в unity. Возможно на js так правильно:
private _lastPosVector3;

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

__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 15.06.2011, 22:53   #7
SaM_
ПроЭктировщик
 
Аватар для SaM_
 
Регистрация: 15.06.2011
Сообщений: 111
Написано 2 полезных сообщений
(для 3 пользователей)
Ответ: Передвижение врагов

Я в C# копипастил. Странно...
(Offline)
 
Ответить с цитированием
Старый 15.06.2011, 22:55   #8
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,512
Написано 2,964 полезных сообщений
(для 5,253 пользователей)
Ответ: Передвижение врагов

Это не весь скрипт, это та часть, которую вы привели
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 15.06.2011, 22:57   #9
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,512
Написано 2,964 полезных сообщений
(для 5,253 пользователей)
Ответ: Передвижение врагов

Попробуйте так:
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;
  }

__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
SaM_ (15.06.2011), SGREED (22.02.2013)
Старый 15.06.2011, 23:03   #10
SaM_
ПроЭктировщик
 
Аватар для SaM_
 
Регистрация: 15.06.2011
Сообщений: 111
Написано 2 полезных сообщений
(для 3 пользователей)
Ответ: Передвижение врагов

Отлично! Работает. Большое спасибо.
(Offline)
 
Ответить с цитированием
Старый 15.06.2011, 23:22   #11
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,512
Написано 2,964 полезных сообщений
(для 5,253 пользователей)
Ответ: Передвижение врагов

Не за что )
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com