Как рассчитать расстояние между массивом gameObject? - PullRequest
0 голосов
/ 04 мая 2020

Как рассчитать расстояние между сгенерированными кубиками. Назначенный сценарий на кости только определяет другую скорость. Как рассчитывается расстояние между отдельными экземплярами кубов? Извините за плохой Engli sh, я использую гугл trnslator. Я прилагаю код, и я новичок в устройстве

public class vehicless : MonoBehaviour 
{
    [SerializeField] private GameObject[] vehicle;
    [SerializeField] private Transform spawnPos;
    [SerializeField] private float minTime;
    [SerializeField] private float maxTime;

    int randomInt;

    // Use this for initialization
    void Start () 
    {
        StartCoroutine(SpawnVehicle()); 
    }

    // Update is called once per frame
    void Update () 
    {   
    }

    private IEnumerator  SpawnVehicle()
    {
        int i=1;        
        while(true)
        {     
            randomInt = Random.Range(0,vehicle.Length);

            yield return new WaitForSeconds(Random.Range(minTime,maxTime));

            GameObject myPrefabInstance = Instantiate(vehicle[randomInt],spawnPos.position,Quaternion.identity);
            var red =   myPrefabInstance.gameObject.name; //NAME OBJECT
             var  namecube  = red + i ;
             Debug.Log("Name object:"+namecube ) ;   
             i++;
         }
    } 
}   


//  float   dist = Vector3.Distance(----------);

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Я предполагаю, что кубы имеют разные скорости, объектов может быть много, например, 10,15 кубов и куб, который будет иметь более высокую скорость, чтобы замедляться перед кубом, который имеет более медленную скорость.

0 голосов
/ 04 мая 2020

Если вам нужно быстро найти расстояние между двумя объектами, я предлагаю вам указать это расстояние в словаре с помощью Tuple Key = (GameObject, GameObject) и Value = float:

 Dictionary<(GameObject, GameObject), float>() 



public Dictionary<(GameObject, GameObject), float>() calculate(GameObject[] objs)
{
    var distanceArray = new Dictionary<(GameObject, GameObject), float>();

    for (int i = 0; i < objs.Length; i++)
    {
        for (int j = i; j < objs.Length; j++)
        {
          if (i == j)
          {
            //distance between same obj is 0f
            continue;
          }
          else
          {
            distanceArray.Add((objs[i], objs[j]), Vector3.Distance(objs[i].transform.position, objs[j].transform.position));
          }
        }
    }
   return distanceArray;
}

После того, как вы сможете быстро найти расстояние между двумя объектами, например так:

    if (distanceArray.ContainsKey((obj1, obj2)))
    {
        distance = distanceArray[(obj1, obj2)];
    }
    else if (distanceArray.ContainsKey((obj2, obj1)))
    {
        distance = distanceArray[(obj2, obj1)];
    }
    else if (obj1 == obj2)
    {
        distance = 0f;
    }
    else
    {
        //Error
    }

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

    GameObject myPrefabInstance = Instantiate(vehicle[randomInt],spawnPos.position,Quaternion.identity);
    for (int i = 0; i < vehicle.Length; i++)
    {
        var distance = Vector3.distance(myPrefabInstance.transform.position, vehicle[i].transform.position);
        Debug.Log($"Distance: {distance}");
    }
...