Unity 6.3
0 онлайн 17 гостей 3 в системе
Вход

MonoBehaviour.OnWillRenderObject()

Описание

Вызывается для каждой камеры, если объект видим и не является элементом UI.

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

OnWillRenderObject вызывается несколько раз на кадр. Она не вызывается на отключенном MonoBehaviours.

OnWillRenderObject подходит для:

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

OnWillRenderObject не подходит для:

  • Изменение позиции объекта или его преобразование. Это происходит потому, что процесс удаления (который определяет, видим ли объект) уже произошел. Если вы переместите объект сюда, он может уже быть включен в список отображения для этого кадра, и сцена может не обновляться, как ожидалось. Вы можете увидеть визуальные артефакты, всплывающие или непоследовательные результаты отображения.
  • Изменение камеры. Вы можете прочитать Camera.current, но изменять настройки камеры здесь, как правило, не рекомендуется. Если вам нужно изменить настройки камеры перед выбросом, используйте MonoBehaviour.OnPreCull или MonoBehaviour.OnPreRender вместо этого.

Camera.current будут установлены на камеру, которая будет рендировать объект.

Примечание: OnWillRenderObject не имеет эффекта при вызове из элемента UI.

Дополнительные ресурсы: MonoBehaviour.OnPreCull или MonoBehaviour.OnPreRender

using UnityEngine;
using System.Collections;

public class ExampleScript : MonoBehaviour { public Renderer rend;

private float timePass = 0.0f;

void Start() { rend = GetComponent<Renderer>(); }

void OnWillRenderObject() { timePass += Time.deltaTime;

if (timePass > 1.0f) { timePass = 0.0f; print(gameObject.name + " is being rendered by " + Camera.current.name + " at " + Time.time); } } }