SuperQwerty
Мастер
(1998)
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;
}
}
```
В этом скрипте враг начинает преследовать игрока, если тот находится в зоне видимости. Для проверки видимости используется луч, который выпускается из позиции врага в направлении игрока и проверяет, нет ли препятствий на пути. Если препятствий нет, враг начинает преследовать игрока. Если игрок выходит из зоны видимости, враг перестает преследовать его.