2017-02-02 2 views
0

Я уже пробовал шейдеры глубинной маски и рассмотрел некоторые другие идеи, но мне кажется, что это меня совсем не устраивает. Я делаю AR-игру, и у меня есть сцена с домом и деревьями. Все эти объекты анимированы и делают что-то вроде падения с неба, но не сразу, а последовательно. Например, дом первый, потом деревья, затем забор и т.д.Unity3d - Вам нужно скрыть группу объектов в области

(PLZ, посмотреть на мою картину для деталей) http://f2.s.qip.ru/bVqSAgcy.png

Если пользователь перемещает камеру слишком далеко, он будет видеть все эти объекты прилипаемость в воздухе и ждут, когда их заказ начнет падать, и это не хорошо. Я хочу скрыть эту область со всех сторон (потому что в AR-камеру можно свободно перемещаться) и сделать все части видимыми только тогда, когда каждый начнет двигаться (падая).

(еще один экран) http://f3.s.qip.ru/bVqSAgcz.png

Я думал об анимации событиях, но есть слишком много объектов (кирпичи, к примеру), и я не могу справиться со всеми из них вручную.

Я с нетерпением жду вашего большой совет;)

P.S. Извините за мой плохой английский.

+1

Эй, отлично, что вы нашли решение самостоятельно - знаете ли вы, что можете добавить свой собственный ответ на свой вопрос? Пожалуйста, сделайте это и подумайте о том, чтобы принять его после окончания периода ожидания (24 часа)! – Serlite

+0

18 часов, если быть точнее :) OK) –

+0

Не забудьте принять ваше решение в качестве правильного. _ (Принятие ответа помогает будущим посетителям, выходящим на эту страницу) _ – Kardux

ответ

0

Вы можете отключить их (объекты, которые собираются упасть), рендеринга сетки и повторно активировать их, когда они готовы упасть.

См. here для получения дополнительной информации о рендерере ячеек.

+0

Я уже упоминал, что слишком много объектов, мое единство даже вряд ли реагирует, если я открываю окно анимации. Я не могу вручную установить время для рендеринга mesh, когда он должен быть включен, и не знаю, как это сделать автоматически. –

+0

Что я видел в вашей иерархии, вы группируете свои объекты в родительском «A». Вы можете попробовать включить и отключить GameObject A, как сказал @habsi. – Thalthanas

+0

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

0

Деактивировать объект. Вы можете использовать координаты видового экрана камеры, чтобы получить позицию y за пределами области просмотра. Они начинаются в левом нижнем углу экрана (0,0) и идут в верхнем правом углу экрана (1,1). Преобразуйте их в глобальные координаты. Camera.ViewportToWorldPoint

Vector3 outsideCamera = Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 1.2f, 10.0f)); 

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

myObject.transform.position = new Vector3(myObject.transform.position.x, outsideCamera.y, myObject.transform.position.z); 

Другая вещь, которую вы могли бы дополнительно сделать это масштабирование объекта от очень маленьких до его предполагаемого размера, когда он падает. Это предотвратит видимость объекта до падения, когда пользователи указывают камеру вверх.

+0

У меня есть tooooo много объектов (посмотрите на это: http://f3.s.qip.ru/bVqSAgcB.png - вам нужно прокручивать и прокручивать вниз, чтобы получить последний объект 3d-модели). Поэтому я не могу использовать какие-либо события. Включение/выключение рендеринга сетки или изменение масштаба объектов. Ну, я могу, но это займет очень много времени. Возможно, возможно контролировать положение объекта в функции обновления, однако я не уверен, как это влияет на производительность. –

+0

Число объектов не должно быть релевантным. Вы можете добавить публичный список в свой скрипт для отслеживания объектов. Или вы можете пометить их и получить их в начале вашего приложения. Вкратце вы должны использовать объект-менеджер, который отслеживает все ваши объекты и отображает/скрывает их соответственно. – habsi

0

1- Возможно, вы можете использовать Камера.

Или вы можете использовать только 2 Камеры, если вам нужно отобразить, скажем, пейзаж на одном (который не будет отображать дом + деревья + ...) с «большой» плоскостью отсечения и использовать вторую один с Только глубина прозрачные флаги, отображающие только предметы (у этого может быть меньшая плоскость отсечения от того, что я понимаю).

2- Другое предложение, которое я дал бы вам добавляет масштаб к анимации:

  • установить масштаб 0 на начало анимации
  • ждать пункт будет необходимо падают
  • установить масштаб 1 (с переходом при необходимости)
  • сделать деталь опадают

EDIT: Обходной путь, который вы нашли, тоже очень хорош! Но отслеживать только мировое положение должно быть достаточно, я думаю (сохраняя крошечный объем памяти).

Надеюсь, что это помогает,

+1

1. Обрезать плоскость не может помочь «cas это игра AR, и камера не имеет фиксированной позиции. 2. Я не могу управлять масштабированием для себя. Казино-анимационное окно не может обрабатывать такой длинный список объектов. Мой 3d модельер использует 3d max, и он сказал, что есть некоторые проблемы с масштабирующими объектами (они не имеют фиксированного значения, как в единстве) 3. Не знаю, почему, но только мировое положение не работает по какой-либо причине , –

0

Наконец, решение, которое я выбрал. Я добавил этот скрипт к каждому объекту в композиции. Он сохраняет позицию объекта (в моем случае как в мире, так и локально) в Start() и слушает, если он изменяется в Update(). Итак, если это правда, прекратите мониторинг и установите MeshRenderer в состоянии.

Даже мой смешной дешевый китайский смартфон жив после этого, поэтому, я думаю, все в порядке.

Смежные вопросы