improve enemy AI
This commit is contained in:
@@ -22,7 +22,7 @@ public abstract class Character : MonoBehaviour
|
||||
private Rigidbody2D _body;
|
||||
private CapsuleCollider2D _capsuleCollider;
|
||||
protected bool _isOnBridge;
|
||||
protected bool _isOnLadder = false;
|
||||
private bool _isOnLadder = false;
|
||||
protected bool _isFalling;
|
||||
protected bool _facingRight = true;
|
||||
|
||||
|
||||
+11
-36
@@ -1,4 +1,5 @@
|
||||
using UnityEngine;
|
||||
using UnityEditor.Experimental.GraphView;
|
||||
using UnityEngine;
|
||||
|
||||
public class EnemyAI : Character
|
||||
{
|
||||
@@ -20,49 +21,23 @@ public class EnemyAI : Character
|
||||
float vertical = 0;
|
||||
|
||||
Vector2 directionToPlayer = Player.Instance.transform.position - transform.position;
|
||||
directionToPlayer.Normalize(); // Нормализуем вектор, чтобы скорость была постоянной
|
||||
directionToPlayer.Normalize();
|
||||
|
||||
// Преследуем игрока только по горизонтали, если враг не на лестнице
|
||||
if (!_isOnLadder)
|
||||
if (Mathf.Abs(Player.Instance.transform.position.y - transform.position.y) < 0.1f)
|
||||
{
|
||||
horizontal = directionToPlayer.x;
|
||||
}
|
||||
else if (isAllowVertical)
|
||||
{
|
||||
float verticalDistance = Player.Instance.transform.position.y - transform.position.y;
|
||||
float verticalDirection = Mathf.Sign(verticalDistance);
|
||||
vertical = verticalDirection;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Вычисляем направление движения к игроку по вертикали, если враг на лестнице
|
||||
float verticalDistance = Player.Instance.transform.position.y - transform.position.y;
|
||||
float verticalDirection = Mathf.Sign(verticalDistance);
|
||||
vertical = verticalDirection;
|
||||
horizontal = directionToPlayer.x;
|
||||
}
|
||||
|
||||
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))
|
||||
{ horizontal = -1; }
|
||||
if (Input.GetKey(KeyCode.H))
|
||||
|
||||
Reference in New Issue
Block a user