AI система наведения
Добавлено: 11 мар 2012, 23:45
Господа, понимаю, что подобные темы поднимались, но ответа на свой вопрос не нашел. А проблема такая: есть объект-противник, есть объект-игрок, нужно сделать так, чтобы противник стрелял по игроку только тогда, когда тот в прицеле грубо говоря. Я так понимаю - тут работа с углами. У меня щас получается, что противник стреляет туда, откуда игрок уже улетел, возможно надо еще делать поправку на скорость. Вот наковырял такой код:
Синтаксис:
Используется csharp
void FixedUpdate () {
float DistanceToPlayer = Vector3.Distance(enemy.position, player.position); // Дистанция до цели
if(DistanceToPlayer <= 500){
Vector3 enemyDirection = transform.TransformDirection(Vector3.forward);
Vector3 DirectionToPlayer = player.position - enemy.position;
float EnemyPlayerAngle = Vector3.Angle(DirectionToPlayer, enemyDirection);
Quaternion rot = Quaternion.LookRotation(player.position - enemy.position);
enemy.rotation = Quaternion.Slerp(enemy.rotation, rot, rotationSpeed * Time.deltaTime);
if(DistanceToPlayer <= 200){
// Если получили нужный угол прицела, то стреляем!
if (EnemyPlayerAngle < 10.0f){
// Стреляем
}
}
}
}
float DistanceToPlayer = Vector3.Distance(enemy.position, player.position); // Дистанция до цели
if(DistanceToPlayer <= 500){
Vector3 enemyDirection = transform.TransformDirection(Vector3.forward);
Vector3 DirectionToPlayer = player.position - enemy.position;
float EnemyPlayerAngle = Vector3.Angle(DirectionToPlayer, enemyDirection);
Quaternion rot = Quaternion.LookRotation(player.position - enemy.position);
enemy.rotation = Quaternion.Slerp(enemy.rotation, rot, rotationSpeed * Time.deltaTime);
if(DistanceToPlayer <= 200){
// Если получили нужный угол прицела, то стреляем!
if (EnemyPlayerAngle < 10.0f){
// Стреляем
}
}
}
}