Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

ИИ врага для юнити

Никита Степаненко Ученик (170), на голосовании 1 год назад
Я новичок в юнити и пока что не очень хорошо знаю C# ,вобщем не как не получается сделать врага который будет просто передвигаться по локации пока в его поле зрения не попадется игрок, как игрок попадется враг бежал за ним до тех пора пока игрок не выйдет из его поле зрения . скиньте сайт где искать или напишите скрипт пожалуйста. Заранее спасибо !
Голосование за лучший ответ
SuperQwerty Мастер (2000) 1 год назад
Друг, так может, сначала Unity, а лучше вообще сначала сам C# поизучай, не ?
Ты же сам алгоритм своих действий написал, попадает игрок в поле зрения и другой начинает бежать за ним.
Разбирайся и начни реализовывать.
Узнавай что такое поле зрения, как вообще к нему обратиться и т.д.
Твой вопрос - выстрел в небо. Никто тебе на него не ответит как ты хочешь.
Вай? Мастер (2026) 1 год назад
Вот пример скрипта, который может помочь вам реализовать такого врага:

```csharp
using UnityEngine;

public class Enemy : MonoBehaviour
{
public float speed = 3f; // скорость передвижения врага
public float visionRange = 10f; // расстояние, на котором враг может заметить игрока
public Transform target; // цель - игрок
public LayerMask obstacleMask; // слой препятствий

private bool isChasing = false; // флаг, указывающий, что враг преследует игрока

private void Start()
{
// находим игрока и сохраняем его трансформ
target = GameObject.FindGameObjectWithTag("Player").transform;
}

private void Update()
{
// если игрок в зоне видимости
if (CanSeeTarget())
{
// враг начинает преследовать игрока
isChasing = true;
}
// если враг преследует игрока
if (isChasing)
{
// вычисляем направление к игроку
Vector3 direction = (target.position - transform.position).normalized;
// передвигаем врага в направлении игрока
transform.position += direction * speed * Time.deltaTime;
}
}

// проверяем, видит ли враг игрока
private bool CanSeeTarget()
{
// вычисляем расстояние до игрока
float distanceToTarget = Vector3.Distance(transform.position, target.position);
// если расстояние меньше зоны видимости
if (distanceToTarget < visionRange)
{
// проверяем, нет ли препятствий между врагом и игроком
RaycastHit hit;
if (Physics.Raycast(transform.position, target.position - transform.position, out hit, distanceToTarget, obstacleMask))
{
// если есть препятствие, враг не видит игрока
return false;
}
// если препятствий нет, враг видит игрока
return true;
}
// если расстояние больше зоны видимости, враг не видит игрока
return false;
}
}
```

В этом скрипте враг начинает преследовать игрока, если тот находится в зоне видимости. Для проверки видимости используется луч, который выпускается из позиции врага в направлении игрока и проверяет, нет ли препятствий на пути. Если препятствий нет, враг начинает преследовать игрока. Если игрок выходит из зоны видимости, враг перестает преследовать его.
Похожие вопросы