Страница 1 из 1

Правильный спавн префабов на сцене (определение позиции)

СообщениеДобавлено: 31 мар 2018, 21:01
programmist_derevo
Всем привет! Не могу допереть, как реализовать казалось бы не сложную вещь.
Есть префаб куба(физическое тело). Есть комната со стенами и полом. Есть игрок, который кликает мышкой. По клику мышки куда игрок ткнул, в той точке и спавнится куб.
Проблема в том, что префаб имеет объем, он не точка. И если спавнить его в точке - он появится наполовину в стене или в полу. И вылетит пулей оттуда (вытолкнет физика).
Вот как определять вообще позицию в такой ситуации? Я еще разобрался, как спавнить всегда над землей (надо сместить центр объекта к низу), но если еще сбоку что-то мешает ему (стена например или другой объект) - это уже не помогает. :-?

Ай нид хелп!

картинка для пояснения:
Изображение

Re: Правильный спавн префабов на сцене (определение позиции)

СообщениеДобавлено: 31 мар 2018, 21:28
1max1
Рейкастишь в плоскость берешь ее нормаль и по этой нормали смещаешь свой объект на нужную ширину / высоту.

Re: Правильный спавн префабов на сцене (определение позиции)

СообщениеДобавлено: 31 мар 2018, 21:44
programmist_derevo
1max1 писал(а):Рейкастишь в плоскость берешь ее нормаль и по этой нормали смещаешь свой объект на нужную ширину / высоту.

Можно по-подробнее об этом?
Прикрепил картинку-пример к шапке.

Re: Правильный спавн префабов на сцене (определение позиции)

СообщениеДобавлено: 01 апр 2018, 10:14
lawsonilka
Лучше всего было бы иметь сетку на которой и спавнишь префабы, хотя бы небольшую локальную сетку.

Re: Правильный спавн префабов на сцене (определение позиции)

СообщениеДобавлено: 01 апр 2018, 11:50
1max1
Пример с нормалью (не будет работать корректно если пульнуть в место стыка со стеной и полом к примеру).
Вешать на камеру.
Синтаксис:
Используется csharp
class Spawner : MonoBehaviour
{
    [SerializeField] GameObject _cube;

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            RaycastHit hitInfo;

            if (Physics.Raycast(new Ray(transform.position, transform.forward), out hitInfo))
            {
                var cube = Instantiate(_cube);

                cube.transform.position = hitInfo.point + hitInfo.normal * 0.5f; // 0.5 это ширина куба / 2

                Destroy(cube, 3.0f);
            }
        }
    }
}
 

Re: Правильный спавн префабов на сцене (определение позиции)

СообщениеДобавлено: 17 июл 2020, 22:24
labinzevvAlex
Как вариант ограничить спавн координатами, на расстояние равное расстоянию от центра куба, до его коллайдера или чуть больше, по осям X и Z