Массивный код для расчёта расстояния от беспилотника до земли

143
26 ноября 2021, 10:30

У меня терейн разобран на составные части :

Как существенно сократить мой код подсчёта расстояния от земли до беспилотника:

void HeightToDrone() {
    if(bpla!=null && heightTodrone!=null && tempGamObjParentTerrain!=null) {
        Terrain[] tempTerrain = tempGamObjParentTerrain.GetComponentsInChildren<Terrain>();
        Terrain terrainactive = null;
        for (int t=0;t<tempTerrain.Count();t++) {
            if (bpla.transform.position.x >= tempTerrain[t].GetPosition().x && bpla.transform.position.x <= tempTerrain[t].GetPosition().x + tempTerrain[t].terrainData.size.x
            && bpla.transform.position.z >= tempTerrain[t].GetPosition().z && bpla.transform.position.z <= tempTerrain[t].GetPosition().z + tempTerrain[t].terrainData.size.z)
            {
                terrainactive=tempTerrain[t];
            }
        }
        if (bpla.activeSelf==true&&terrainactive) {
            float dist = Vector3.Distance(bpla.transform.position, new Vector3(bpla.transform.position.x,terrainactive.SampleHeight(bpla.transform.position),bpla.transform.position.z));
            heightTodrone.text = "Высота:"+dist+" м";
        }
    }
}

И можно ли сократить приведённые код ?

Answer 1

А не проще ли рейкастом?

groundLayer - LayerMask вашего террейн. В инспекторе объекта под именем tag и layer. Создайте отдельный layer.

float FindHeight (GameObject Dron, int groundLayer) {
    Vector3 DronPos = Dron.transform.position;
    RaycastHit hit;
    if (Physics.Raycast(DronPos, Vector3.down, out hit, Mathf.Infinity, 1 << groundLayer)) {
        return Vector3.Distance(DronPos, Dron.transform.InverseTransformPoint(hit.point));
    } else return 0;
}
READ ALSO
не закрывает процесс

не закрывает процесс

Есть основная программа, которая при определенном условии запускает второй exe'шник, который должен в свою очередь закрыть основную программу,...

175
Serialized file size of 6.98 GB (7493681080 bytes) exceeds maximum. Подгрузка чанков в райнтайме по надобности

Serialized file size of 6.98 GB (7493681080 bytes) exceeds maximum. Подгрузка чанков в райнтайме по надобности

Возникает из-за размера террейна(он разбит на 100 частей)Во время сборки проекта:

283
Изменение статуса потока

Изменение статуса потока

Подскажите пожалуйстаСоздаю новый поток Thread и запускаю его, затем я проверяю его состояние IsActive, мне нужно когда оно будет равно false снова...

97