Как получить AI персонажа в Unity для go вокруг игрока на пути к некоторому указанному c очку - PullRequest
1 голос
/ 14 февраля 2020

Когда мой игрок находится на расстоянии от ИИ, ИИ меняет свое состояние на Беглое и вызывает эту функцию:

void Flee()
    {
        inTransit = false; //this makes sure he gets to his destination before rerouting

        if(IsPlayerBlockingPath() && DistanceToTarget(player.position) < 10f)
        {
            PerpendicularMovement(HorizontalNormalToTarget(player.position));
        }
        else        
        {
            MoveTowardsTarget(enemyBase.position);
        }       
    }

Я использую скалярное произведение (как я полагаю) единицы вектор от ай до его «врага» и вектор от ай до игрока. если это значение между, возможно, 0,5 и 1, то эти два вектора движутся в одинаковых направлениях, поэтому нам нужно ориентироваться вокруг игрока. Однако мой ИИ движется только вокруг игрока в определенных частях карты, а не в других


float DistanceToTarget(Vector3 location)
    {
        return (transform.position - location).magnitude;
    }

bool IsPlayerBlockingPath()
    {
        Vector3 AIToPlayer = HorizontalNormalToTarget(player.position);
        Vector3 AIToEnemyBase = HorizontalNormalToTarget(enemyBase.position);

        float dotP = Vector3.Dot(AIToPlayer, AIToEnemyBase);
        if (dotP > blockTollerance) //blockTollerance is set to 0.1f
        {
            return true;
        }

        return false;
    }

void PerpendicularMovement(Vector3 perpToThis)
    {
        Vector3 perpDirection = Quaternion.Euler(0, 90, 0) * perpToThis;
        MoveTowardsTarget(perpDirection * perpMovementIncrement);
//I need him to move in this direction a bit further than he currently will
    }
...