Удаление компонента в Unity

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

Еще перед созданием отладочного кода я понял, что временные объекты должны создаваться без компонента Collider. Для этого я писал такой код (на C#):


    // Создаем примитив - сферу
    GameObject GO = GameObject.CreatePrimitive(PrimitiveType.Sphere);
    // Удаляем компонент SphereCollider
    GameObject.Destroy(GO.GetComponent<SphereCollider>());


По логике вещей в результате должна получиться простая сфера, не реагирующая на столкновения и не откликающаяся на трассировку луча, т.е. любой луч должен свободно проходить через такую сферу. При просмотре в редакторе Unity так оно и получается: выбираем в Инспекторе добавленную программно сферу и видим, что компонент SphereCollider отсутствует. Но очень похоже на то, что алгоритм все же спотыкается о такую сферу.

( Читать дальше )

Prefab'ы в Unity - работаем правильно!

Unity PrefabВ предыдущем посте про Prefab'ы в Unity я начал разбираться, как же работают «заготовки» в Unity. Уже отчаявшись найти ответ, начал писать вопрос на форуме русских разработчиков, и, как это обычно бывает, уже в процессе написания понял, что не пробовал еще один вариант работы с Prefab'ами. Воистину правильно заданный вопрос есть половина ответа!

Итак, вот что у меня получилось.

( Читать дальше )

Prefab'ы в Unity

Импортированная в Unity 3D-модель
Prefab — это заранее подготовленный игровой объект, который содержит все необходимые модели и компоненты. По-русски, наверное, можно назвать prefab «заготовкой». Так проще, чтобы не переключать все время клавиатуру :) Заготовки хранятся в специально организованной создателем игры библиотеке в папке проекта. Библиотека представляет собой также набор иерархически размещенных папок.

При создании игровых локаций можно просто кидать заготовки на сцену, а можно добавлять их динамически программным способом, как, например, новых врагов после смерти их соратников. Именно для этого и нужны заготовки. Один раз создал врага, навешал на него все необходимые компоненты (контроллеры столкновений, физику, AI, звуковые источники и т.д.), и через простой скрипт или готовый компонент Respawner генерируешь врагов в нужных местах сцены и в нужных объемах.

Но прежде чем воспользоваться всеми преимуществами заготовок, необходимо понять и освоить основные принципы работы с заготовками в Unity, а они не столь очевидны.

( Читать дальше )