Функция LookAt и оптимизация

В играх от первого лица иногда можно найти какое-нибудь изображение, проще говоря, обычный спрайт, который всегда «смотрит» на игрока, то есть в камеру. Парой это может быть очень полезным, чтобы сообщать некую информацию игроку, особенно при использовании спрайта, так как он не зависит от источников света, если не установлен материал, и всегда будет виден, при любом освещении. Впрочем, ниже приведенный способ можно применять и на любой 3D объект тоже, главное чтобы у объекта был компонент Mesh Renderer или Sprite Renderer, для спрайта.



В общем и целом, тут ничего особенного, кроме одной детали - оптимизация. Допустим, после того как игрок вдоволь налюбуется нашим спрайтом и пойдет дальше, уже не будет необходимости делать какие-либо расчеты, соответственно и нагружать систему лишней нагрузкой.


И так, создаем С# скрипт под названием, например ObjectLookAtCamera:

Для начала нам понадобиться объект, на который будем смотреть:

private Transform target;

В конкретном случаи это камера игрока, кстати у камеры должен быть тег MainCamera, находим камеру и выключаем скрипт:

void Start ()
{
	enabled = false;
	target = GameObject.FindGameObjectWithTag("MainCamera").transform;
}

Собственно функция LookAt, смотрим на:

void Update () 
{
	transform.LookAt(target);
}

Поскольку скрипт выключен, то делаем его активным, только когда он попадает в камеру:

void OnBecameVisible() 
{
	enabled = true;
}

И снова выключаем, когда камера не смотрит на спрайт:

void OnBecameInvisible() 
{
	enabled = false;
}

Таким образом, всё будет работать если игрок смотрит на объект, и переходит в "режим ожидания" если объект не в поле зрения игрока, тем самым экономя ресурсы. OnBecameVisible и OnBecameInvisible полезные функции, которые можно и нужно использовать для оптимизации в игре.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
  • Яндекс.Метрика