NP C Движение в тактической RPG - PullRequest
0 голосов
/ 16 апреля 2020

Я создаю тактическую 3D RPG-игру, и у меня есть следующая проблема:

Я хочу, чтобы NP C перемещался по сетке. Сетка состоит из плиток, и к каждой плитке прикреплен скрипт. В этом сценарии есть переменная с именем TilePosition , которая является Vector2Int, и я использую ее для хранения значений X и Y в сетке, как вы можете видеть на изображении. К персонажу NP C прикреплен скрипт, называемый NPCPlayer , где используется Vectir2Int с именем NPCGridPosition для сохранения своей позиции в сетке.

Значения тайлов X и Y в сетке

Также относительно NP C, у него есть скрипт под названием NPCMovement . В этом сценарии я установил raycast, который начинается с NP C футов и идет вниз. Я использую raycast, чтобы взять переменную TilePosition , как написано в коде:

public void MoveNPC()
    {
        if (Physics.Raycast(transform.position, Vector3.down * MaxDistance, out hitDown))
        {
            if(hitDown.transform.tag == "Tile")
            {
                Tile TilesPosition = hitDown.transform.gameObject.GetComponent<Tile>();
                NPCPlayer NPCPosition = this.GetComponent<NPCPlayer>();
            }
        }
    }

Однако, когда я пытаюсь переместить NP C через сетку, 3 строки впереди он уходит, потому что он движется в соответствии с мировым положением, а не движется в соответствии с его положением плитки.

Я использую эти строки кода, чтобы заставить его двигаться:

public void MoveNPC()
    {
        if (Physics.Raycast(transform.position, Vector3.down * MaxDistance, out hitDown))
        {
            if(hitDown.transform.tag == "Tile")
            {
                Tile TilesPosition = hitDown.transform.gameObject.GetComponent<Tile>();
                NPCPlayer NPCPosition = this.GetComponent<NPCPlayer>();

                targetPosition.x = TilesPosition.TilePosition.x + 3 ; 
                targetPosition.y = TilesPosition.TilePosition.y;

                this.transform.position = Vector3.MoveTowards(this.transform.position, targetPosition,velocity);
            }
        }
    }

Как я могу заставить NP C двигаться в соответствии с его положением в сетке?

Я буду рад, если кто-то может немного помочь мне с этим.

Полный код:

public class NPCMovement : MonoBehaviour
{

    Vector3 targetPosition;
    public float velocity = 0.2f;

    public RaycastHit hitDown;
    public Vector3 direction = Vector3.down;
    public float MaxDistance = 10f;

    void Start()
    {

    }

    void Update()
    {
        MoveNPC();
    }

    public void MoveNPC()
    {
        if (Physics.Raycast(transform.position, Vector3.down * MaxDistance, out hitDown))
        {
            if(hitDown.transform.tag == "Tile")
            {
                Tile TilesPositions = hitDown.transform.gameObject.GetComponent<Tile>();
                NPCPlayer NPCPosition = this.GetComponent<NPCPlayer>();

                targetPosition.x = TilesPosition.TilePosition.x + 3 ; 
                targetPosition.y = TilesPosition.TilePosition.y;

                this.transform.position = Vector3.MoveTowards(this.transform.position, targetPosition,velocity);

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