【问题标题】:How to calculate the distance between array gameObject?如何计算数组gameObject之间的距离?
【发布时间】:2020-05-04 08:55:39
【问题描述】:

如何计算生成的立方体之间的距离。骰子上的指定脚本仅指定不同的速度。如何计算各个实例化立方体之间的距离? 抱歉英语不好,我正在使用 google 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(----------);

感谢您的帮助

【问题讨论】:

  • 是的,我想计算新立方体之间的距离
  • 你有一个无限循环..你确定要这样做吗?
  • @Frenchy 它是一个带有yield 的协程,所以有一个无限循环基本上是Update 方法的替代品;)
  • what和what的距离?你到底在问什么?或者换句话说:没有 c# 或 Unity ......你说你想要多个对象之间的距离是指什么? ...例如所有距离的总和? ...最后两个物体之间的距离? ...最后一个对象与某个参考对象之间的距离?

标签: arrays unity3d distance gameobject


【解决方案1】:

如果您需要快速找到 2 个对象之间的距离,我建议您使用 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}");
    }

【讨论】:

    【解决方案2】:

    我想立方体有不同的速度,物体可能很多,例如 10.15 个立方体和一个速度更快的立方体在速度较慢的立方体前面减速。

    【讨论】:

    • 我需要找出n个生成的立方体之间的当前距离谢谢帮助
    猜你喜欢
    • 2017-04-21
    • 2023-04-09
    • 2019-10-09
    • 1970-01-01
    • 2013-06-26
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多