Итак. Использовал Ваш урок на сайт как основу. Перевел код на JavaScripts. Вот что получилось.
// Make sure there is always a character controller
@script RequireComponent (CharacterController);
// скорость ходьбы и скорость поворота в секунду
var moveSpeed : float = 2;
var turnSpeed : float = 90;
private var _controller : CharacterController;
private var _thisTransform : Transform;
private var _playerTransform : Transform;
function Start()
{
// Получаем контроллер
_controller = GetComponent(CharacterController);
// Получаем компонент трансформации объекта, к которому привязан данный компонент
_thisTransform = transform;
// Получаем компонент трансформации игрока
if (_playerTransform == null && GameObject.FindWithTag("Player"))
_playerTransform = GameObject.FindWithTag("Player").transform;
}
// Все что связано с физикой выполняем в FixedUpdate
function Update()
{
// направление на игрока
var playerDirection : Vector3 = (_playerTransform.position - _thisTransform.position).normalized;
// угол поворота на игрока
var angle : float = Vector3.Angle(_thisTransform.forward, playerDirection);
// максимальный угол поворота на текущем кадре
var maxAngle : float = turnSpeed * Time.deltaTime;
// Вычисляем прямой поворот на игрока
var rot : Quaternion = Quaternion.LookRotation(_playerTransform.position - _thisTransform.position);
// поворачиваем врага на игрока с учетом скорости поворота
if (maxAngle < angle)
{
_thisTransform.rotation = Quaternion.Slerp(_thisTransform.rotation, rot, maxAngle / angle);
}
else
{
_thisTransform.rotation = rot;
}
// если дистанция до игрока больше трех метров
if (Vector3.Distance(_playerTransform.position, _thisTransform.position) > 3.0f)
{
// двигаемся к игроку
_controller.Move(_thisTransform.forward * moveSpeed * Time.deltaTime);
}
else // если меньше или равна трем метрам
{
// здесь например стреляем в игрока
}
// гравитация
_controller.Move(Vector3.down * 10.0f * Time.deltaTime);
}
Вопрос в следующем. Как можно убрать что бы enemy не поворачивался к игроку, как бы, "вверх-вниз"