improve enemy AI
This commit is contained in:
@@ -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
@@ -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))
|
||||||
|
|||||||
Reference in New Issue
Block a user