Сначала я попробовал к каждому вражескому клону прикрепить свой собственный скрипт MonoBehaviour и независимо друг от друга выполнять поведение, используя следующий код:
Код: Выделить всё
public class EnemyBehaviour : MonoBehaviour
{
[SerializeField] private float _moveSpeed;
[SerializeField] private GameObject _projectilePrefab;
private Rigidbody _rb;
private BoxCollider _collider;
private float _randomX;
private float _randomZ;
private float _xBoundUpper = -263f;
private float _zBoundUpper = 60f;
private float _xBoundUnder = -411f;
private float _zBoundUnder = -90f;
private float _middleY;
private bool _canWalk;
private bool _targetPointInBounds;
private bool _playerInRange;
private bool _hasFired;
private bool _isAttacking;
private Vector3 _targetPoint;
private Vector3 _enemyCenter;
private Vector3 _playerCenter;
private GameObject _player;
private CapsuleCollider _playerCollider;
private void Awake()
{
_rb = GetComponent();
_collider = GetComponent();
_player = GameObject.Find("Player");
_playerCollider = _player.GetComponent();
}
private void Update()
{
_enemyCenter = this.transform.TransformPoint(_collider.center);
_middleY = _enemyCenter.y;
_playerCenter = _player.transform.TransformPoint(_playerCollider.center);
WalkToRandomPoint();
StartCoroutine(AttackPlayer());
}
private void WalkToRandomPoint()
{
if (!_canWalk && !_playerInRange)
{
_targetPointInBounds = false;
while (!_targetPointInBounds)
{
_randomX = Random.Range(-1f, 1f);
if (_randomX < 0)
{
_randomZ = -1 - _randomX;
}
else
{
_randomZ = 1 - _randomX;
}
Vector3 rayForwardDirection = transform.TransformDirection(new Vector3(_randomX, -0.05f, _randomZ));
Ray ray = new Ray(_enemyCenter, rayForwardDirection);
RaycastHit hit;
if (Physics.Raycast(ray.origin, ray.direction, out hit, Mathf.Infinity))
{
Debug.DrawRay(ray.origin, ray.direction * hit.distance, Color.red);
_targetPoint = new Vector3(hit.point.x, _middleY, hit.point.z);
}
if(_xBoundUnder
Подробнее здесь: [url]https://stackoverflow.com/questions/78999174/how-can-i-improve-performance-of-my-code[/url]
Мобильная версия