 |
15.06.2011, 19:14
|
#1
|
ПроЭктировщик
Регистрация: 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
|
scientist.alien
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений (для 2,593 пользователей)
|
Ответ: Передвижение врагов
2. Как сделать, что бы враг, атакующий игрока, обходил препятствия?
|
А*, или волновой алгоритм, или райкаст для проверки препятствия по пути движения бота. (В порядке ухудшения способа, и в принципе - спадания сложности)
А* и волновой алгоритмы можно нагуглить, их примеров масса, чтобы разобраться; райкаст - в справку юнити загляни, и немного логики надо накрутить.
Этот скрипт выбирает анимацию исходя из системы ввода, которой пользуется игрок. Для того, чтобы анимации игрались у врагов во время их движения, нужно иметь какой-то внутренний способ определять движение/остановку врага. Можно делать через круп - определять разницу с прошлой координатой, а можно делать через мозг - определять, что нужно врагу сделать, устанавливать переменную-статус, и считывая её значение двигать врага и определять анимацию.
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab. We LOVE you. We MADE you.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
15.06.2011, 19:42
|
#3
|
ПроЭктировщик
Регистрация: 15.06.2011
Сообщений: 111
Написано 2 полезных сообщений (для 3 пользователей)
|
Ответ: Передвижение врагов
Taugeshtu, спасибо. Можно ли привести пример кода по первому вопросу?
|
(Offline)
|
|
15.06.2011, 21:02
|
#4
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Передвижение врагов
private Vector3 _lastPos;
void Start() { _lastPos = transform.position; } ... { var pos = transform.position; if (_lastPos!=pos) animation.CrossFade ("Run"); else animation.CrossFade ("Idle"); _lastPos = pos; }
|
(Offline)
|
|
15.06.2011, 22:47
|
#5
|
ПроЭктировщик
Регистрация: 15.06.2011
Сообщений: 111
Написано 2 полезных сообщений (для 3 пользователей)
|
Ответ: Передвижение врагов
Уверен, скрипт рабочий. Но все же выдает ошибку, ссылаясь на первую строчку:
A namespace can only contain types and namespace declaration.
Не могу понять в чем проблема, и так пробовал: И так:
private var lastPos : Vector3;
Прошу помочь. 
|
(Offline)
|
|
15.06.2011, 22:51
|
#6
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Передвижение врагов
Я писал на C# пример. Не люблю js в unity. Возможно на js так правильно:
private _lastPos: Vector3;
function Start() { _lastPos = transform.position; } ... { var pos = transform.position; if (_lastPos!=pos) animation.CrossFade ("Run"); else animation.CrossFade ("Idle"); _lastPos = pos; }
|
(Offline)
|
|
15.06.2011, 22:53
|
#7
|
ПроЭктировщик
Регистрация: 15.06.2011
Сообщений: 111
Написано 2 полезных сообщений (для 3 пользователей)
|
Ответ: Передвижение врагов
Я в C# копипастил. Странно...
|
(Offline)
|
|
15.06.2011, 22:55
|
#8
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Передвижение врагов
Это не весь скрипт, это та часть, которую вы привели
|
(Offline)
|
|
15.06.2011, 22:57
|
#9
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Передвижение врагов
Попробуйте так:
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; } }
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
15.06.2011, 23:03
|
#10
|
ПроЭктировщик
Регистрация: 15.06.2011
Сообщений: 111
Написано 2 полезных сообщений (для 3 пользователей)
|
Ответ: Передвижение врагов
Отлично! Работает. Большое спасибо.
|
(Offline)
|
|
15.06.2011, 23:22
|
#11
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Передвижение врагов
Не за что )
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:24.
|