-Помощь- Как найти расстояние, на котором враг находится на пути? - PullRequest
0 голосов
/ 11 марта 2019

Я сейчас работаю над игрой защиты башни, и у меня есть враг, который движется по пути, каждый угол пути - это «узел», который я использую для создания пути.Я нашел способ узнать, какова длина пути, сложив расстояние между каждым узлом.Но я не могу понять, как найти врага на этом пути, вот мой текущий код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MoveAlongPath : MonoBehaviour
{

    private GameObject[] pathObjects;

    private int currentWayPoint = 0;
    GameObject targetWayPoint;

    private float speed = 2f;

    public float pathDistanceTotal = 0;

    // Start is called before the first frame update
    void Start()
    {
        //Find all of the nodes on the map
        FindNodes();
        transform.position = pathObjects[0].transform.position;
        PathDistance();
    }

    // Update is called once per frame
    void Update()
    {
        //Check if we can move somewhere
        if(currentWayPoint < pathObjects.Length)
        {
            if(targetWayPoint == null) 
                targetWayPoint = pathObjects[currentWayPoint];
            move();
        }
    }

    void FindNodes()
    {
        pathObjects = GameObject.FindGameObjectsWithTag("PathPoint");
    }

    void move()
    {
        transform.right = Vector3.RotateTowards(transform.right, targetWayPoint.transform.position - transform.position, 0, 0.0f);

        transform.position = Vector2.MoveTowards(transform.position, targetWayPoint.transform.position, speed * Time.deltaTime);

        if(transform.position == targetWayPoint.transform.position)
        {
            currentWayPoint++;
            targetWayPoint = pathObjects[currentWayPoint];
        }
    }


    //Find The Path Distance
    void PathDistance()
    {
        int i;
        for (i = 0; i < (pathObjects.Length - 1); i++)
        {
            float dis = Vector2.Distance(pathObjects[i].transform.position, pathObjects[i + 1].transform.position);
            pathDistanceTotal += dis;
        }


    }

}

1 Ответ

0 голосов
/ 11 марта 2019

Вы можете просто добавить все предыдущие точки узлов к итогу, чтобы получить расстояние, или вы можете добавить к нему, когда юнит перемещается между узлами.

Я бы сказал, что для управления такого рода движением вам может быть трудно управлять узлами, просто выполнив pathObjects = GameObject.FindGameObjectsWithTag("PathPoint");, было бы лучше иметь класс, который содержит их список, и в этом случае вы могли бы индексировать их. В настоящее время вы не знаете, находятся ли ваши узлы в правильном порядке.

Затем вы можете сделать то же самое для цикла, который есть в PathDistance, но просто сделать ранний выход, когда достигнете текущего индекса пути, и, наконец, добавить расстояние от единицы до последнего измеренного вами узла.

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