improve enemy AI

This commit is contained in:
Vova
2023-07-22 11:16:28 +03:00
parent 83c44a51a5
commit 6ed4996b38
2 changed files with 12 additions and 37 deletions
+1 -1
View File
@@ -22,7 +22,7 @@ public abstract class Character : MonoBehaviour
private Rigidbody2D _body; private Rigidbody2D _body;
private CapsuleCollider2D _capsuleCollider; private CapsuleCollider2D _capsuleCollider;
protected bool _isOnBridge; protected bool _isOnBridge;
protected bool _isOnLadder = false; private bool _isOnLadder = false;
protected bool _isFalling; protected bool _isFalling;
protected bool _facingRight = true; protected bool _facingRight = true;
+11 -36
View File
@@ -1,4 +1,5 @@
using UnityEngine; using UnityEditor.Experimental.GraphView;
using UnityEngine;
public class EnemyAI : Character public class EnemyAI : Character
{ {
@@ -20,49 +21,23 @@ public class EnemyAI : Character
float vertical = 0; float vertical = 0;
Vector2 directionToPlayer = Player.Instance.transform.position - transform.position; Vector2 directionToPlayer = Player.Instance.transform.position - transform.position;
directionToPlayer.Normalize(); // Нормализуем вектор, чтобы скорость была постоянной directionToPlayer.Normalize();
// Преследуем игрока только по горизонтали, если враг не на лестнице if (Mathf.Abs(Player.Instance.transform.position.y - transform.position.y) < 0.1f)
if (!_isOnLadder)
{ {
horizontal = directionToPlayer.x; horizontal = directionToPlayer.x;
} }
else if (isAllowVertical)
{
float verticalDistance = Player.Instance.transform.position.y - transform.position.y;
float verticalDirection = Mathf.Sign(verticalDistance);
vertical = verticalDirection;
}
else else
{ {
// Вычисляем направление движения к игроку по вертикали, если враг на лестнице horizontal = directionToPlayer.x;
float verticalDistance = Player.Instance.transform.position.y - transform.position.y;
float verticalDirection = Mathf.Sign(verticalDistance);
vertical = verticalDirection;
} }
if (!isAllowVertical)
{
float verticalDistance = Player.Instance.transform.position.y - transform.position.y;
float verticalDirection = Mathf.Sign(verticalDistance);
vertical = verticalDirection;
}
float horizontalDistance = Player.Instance.transform.position.x - transform.position.x;
float horizontalDirection = Mathf.Sign(horizontalDistance);
horizontal = horizontalDirection;
//if (Player.Instance.transform.position.x - transform.position.x < -0.05f && isAllowLeft &&!_isOnLadder)
//{
// horizontal = -1;
//}
//else if (Player.Instance.transform.position.x - transform.position.x > 0.05f && isAllowRight && !_isOnLadder)
//{
// horizontal = 1;
//}
//else if (Mathf.Abs(Player.Instance.transform.position.y - transform.position.y) > 0.05f && isAllowVertical)
//{
// var deltaY = Player.Instance.transform.position.y - transform.position.y;
// vertical = deltaY > 0 ? 1 : -1;
//}
if (Input.GetKey(KeyCode.F)) if (Input.GetKey(KeyCode.F))
{ horizontal = -1; } { horizontal = -1; }
if (Input.GetKey(KeyCode.H)) if (Input.GetKey(KeyCode.H))