Привязать модель дома к земле в единстве

У меня есть набор данных 3d домов, состоящих из многих других моделей. Дома очень разнообразны. Я пытаюсь найти способ привязать дом к местности, используя скрипт. Сценарий вроде работает, проблема в том, что иногда модель внедряется в рельеф даже после настройки оси. Как я могу это исправить, чтобы когда-то привязанные объекты просто сидели на поверхности, а не внутри нее?

public class AlignInEditor : MonoBehaviour 
{
    public bool align = false;
    public bool showLineToSurface = false;

    void Update () 
    {
        if (align)
        {
            RaycastHit hit;
            Ray ray = new Ray (transform.position, Vector3.down);
            if (Physics.Raycast(ray, out hit))
            {
                transform.position = hit.point;
                Debug.Log (transform.name + " aligned.");
            }
            else
            {
                Debug.Log ("No surface found for " + transform.name);
            }
            align = false;
        }

        if (showLineToSurface)
        {
            RaycastHit hit;
            Ray ray = new Ray (transform.position, Vector3.down);
            if (Physics.Raycast(ray, out hit))
            {
                Debug.DrawLine (transform.position, hit.point);
            }
        }
    }
}

Дом встроен в местность

1 ответ

Отдайте лучевую передачу от центра дома на землю, чтобы найти первую точку. Затем примените raycast от этой точки (вертикально) к дому и найдите вторую точку. Затем найдите расстояние между этими двумя точками. Затем поместите дом во вторую точку (на землю) + найденное расстояние.

Другие вопросы по тегам