Предотвратить диагональные движения - PullRequest
0 голосов
/ 23 апреля 2020

Я занимаюсь разработкой 3D-тактической RPG-игры, и мне хотелось бы знать, как можно предотвратить диагональные движения, когда NP C движется? Я хочу, чтобы он определил, где находится игрок в сетке, а затем go после него.

Я могу занять их положение в сетке, но это не сработало. NP C совершает диагональные движения и начинает "тонуть" в сетке. Я пробовал что-то вроде этого, целевая позиция - вектор 3, и я вызываю функцию в Update (), этот скрипт прикреплен к NP C:

public void MoveNPC()
    {
        HumanPlayer = GameObject.FindGameObjectWithTag("Player");
        ScriptPlayer PlayerPosition = HumanPlayer.GetComponent<ScriptPlayer>();
        NPC NPCPosition  = this.GetComponent<NPC>();


        if ((PlayerPosition.GridPosition.x - NPCPosition.GridPositonNPC.x) + PlayerPosition.GridPosition.y - NPCPosition.GridPositonNPC.y) >= movMax &&
            (PlayerPosition.GridPosition.x -NPCPosition.GridPositonNPC.x) + (PlayerPosition.GridPosition.y - NPCPosition.GridPositonNPC.y) <= movMax)
        {
            if((PlayerPosition.GridPosition.x - NPCPosition.GridPositonNPC.x) - (PlayerPosition.GridPosition.y - NPCPosition.GridPositonNPC.y) >= movMax &&
            (PlayerPosition.GridPosition.x - NPCPosition.GridPositonNPC.x) - (PlayerPosition.GridPosition.y - NPCPosition.GridPositonNPC.y) <= movMax){

                targetPosition = HumanPlayer.transform.position;
                targetPosition.y = 1.4f;
            }
        }

        if(this.transform.position != targetPosition)
        {
            this.transform.position = Vector3.MoveTowards(transform.position, targetPosition, velocity * Time.deltaTime);
        }
    }

Как мне это решить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...