Темы:
С помощью скриптов LSL можно узнать, что происходит в окружающем виртуальном мире в непосредственной близости от объекта. Например, обнаружить другие объекты и аватары (агенты).
Для этого существуют сенсоры (Sensors). В пятой части нашего руководства мы рассмотрим их поподробней, а заодно напишем простенький радар агентов.
Примечание для тех, кто любит что-то изучать на готовых примерах: Все скрипты, упоминаемые в тексте, равно как и готовый радарчик, можно бесплатно получить по адресу Lady Vale (38, 209) (в зеленой коробочке). Обращайте внимание на номера примеров example_xxx - они полностью соответствуют именам скриптов на коробке.

Вот простенький радарчик, который можно "надеть" на HUD или просто положить на землю
Сенсоры
Сенсоры позволяют обнаружить объекты и/или агентов рядом с вашим объектом.
Сенсоры представлены следующими функциями:
- llSensor
- llSensorRepeat
- llSensorRemove
А также двумя событиями:
- sensor
- no_sensor
Функции сенсоров подключают события сенсоров, внутри которых можно использовать функции llDetection* для получения разнообразной информации о найденном объекте или агенте.
Важные замечания
- llSensor и llSensorRepeat не обнаруживают объект, содержащий сенсор, а также не обнаруживают агента, который "надел" на себя объект с сенсором - то есть радар, который вы "надели" на себя, вас не обнаружит;
- дальность обнаружения сенсорами составляет максимум 96 метров; известны случаи, когда "дальнобойность" увеличивалась до 300 метров, но это, скорее, баг, чем какая-то закономерность;
- использование сенсоров повышает нагрузку на сервер и может вызывать лаги;
- событие sensor() возвращает максимум 16 обнаруженных объектов; это значит, что если вы придете в место, где собралось большее количество агентов, вы увидите только 16 ближайших из них; это ограничение можно обойти - например, использовать несколько сенсоров с разными углами направленности;
- объекты, надетые на агентов, не определяются сенсором;
- сенсоры не могут обнаружить объекты, прилинкованные (child) к корневому (root) объекту; то есть, если объект, который вы ищите, состоит из более чем одного объекта, то найти его составляющие будет невозможно;
- бытует мнение, что llSensorRepeat может находить объекты и агентов на соседних симах; об этом читайте ниже.
Функция llSensor
Синтаксис llSensor(string name, key id, integer type, float range, float arc)
Запускает одиночное (один раз) сканирование согласно условиям функции.
name - имя объекта/агента, который необходимо найти; если нужно найти все объекты, укажите пустую строку.
key - ключ объекта, который необходимо найти; если нужно найти все объекты, укажите константу NULL_KEY.
type - тип поиска.
Тип поиска указывает сенсору, что именно он должен искать. Тип может быть определен следующими константами: AGENT, ACTIVE, PASSIVE и/или SCRIPTED. Думаю, из названий констант понятно, что под ними подразумевается. Но для большей ясности приведу таблицу, из которой явно следует, на что именно сработает сенсор.

Типы поиска можно комбинировать с помощью побитового OR (|). Например, AGENT | ACTIVE.
Сочетание типа SCRIPTED с другими может привести к несколько неожиданным результатам:
- SCRIPTED будет обнаруживать активные скрипты или двигающиеся объекты, содержащие скрипт.
- AGENT | SCRIPTED будет обнаруживать активные скрипты или двигающиеся объекты, содержащие скрипт; АГЕНТЫ НЕ БУДУТ НАЙДЕНЫ!
- ACTIVE | SCRIPTED будет обнаруживать активные скрипты или двигающиеся объекты, которые содержат скрипт; не будут найдены физические перемещающиеся объекты без скриптов.
- PASSIVE | SCRIPTED будет обнаруживать активные скрипты, нефизические объекты без скриптов и физические объекты, содержащие скрипт; не будут найдены физические неподвижные объекты, в которых нет скрипта.
Продолжение следует...
|
Trisha.Bonetto 15:38, 06.07.07 ссылка
>это ограничение можно обойти - например, использовать несколько сенсоров с разными углами направленности; а можно здесь поподробней. каким образом это можно сделать? |















