Скрыть показать группу объектов по условию

Программирование на Юнити.

Скрыть показать группу объектов по условию

Сообщение iqubik 14 сен 2009, 03:26

Подскажите пожалуйста как должно звучать условие на javascript звучащее на русском как:
Если объект в поле зрения камеры и расстояние до объекта манее чем 3 метра, то
сделать чтото...

Сделано:
Помещение, 10 кабинетов по 5 слева и справа. Я в коридоре. Двери кабинетов закрыты.
Когда я подхожу к кабинету, то дверь подсвечивается для открытия, если кликнуть по ней, то дверь открывается. Внутри кабинета пусто, но если войти в него то сработает триггер на появление и внутренности кабинета появятся, если выйти из триггера, то они изчезнут. Триггер это Raycast Collider расположенный вертикально.
Не сделано:
Надо чтобы внутренности появлялись ещё до открытия двери.
Скажем так: Внутри кабинета висит боксик. От камеры идёт отсчёт расстояния до боксика, и

если (расстояние меньше указанного и камера смотрит на кабинет или персонаж внутри помещения)
{то срабатывает функцию появления внутренностей кабинета.}
иначе {скрытие внутренностей}

Вот код скрытия/появления в зависимости от триггера:
Код адаптирован под пережёванную combined children скриптом геометрию, имеющую имя "comb".

Код: Выделить всё
private var showhide  = false;
private var bival  = false;
private var hideflag  = true;
public var foundItems : ArrayList;
public var ObjectsNames : String = "comb"; //imya dlya poiska geometrii
private var Hidescript : hide;

   function OnTriggerEnter ()
   {
      bival  = true;
      showhide  = true;
//showhide - skrit=false pokazat=true
      var allObjects : Object[];  //obshaya peremenneya dlya vsex obj
      allObjects = FindObjectsOfType(GameObject); //zapolnyaem ee vsemi objectami
      foundItems = new ArrayList(); //peremenneya dlya nyjnix objectov
   
   for (var result : GameObject in allObjects)
      {
         if (result.name.Equals(ObjectsNames))
         {
         foundItems.Add(result); //tyt mi nashli na vsei scene vse GO s imenem "comb"
         }
      }
   Hidescript = GetComponent(hide);
   }
   function OnTriggerExit ()
   {
      showhide  = false;
      hideflag = false;
   }
   


function FixedUpdate ()
   {

      if(showhide == true)
         {
//raskrivaem nekotorie vry4nyu skritie obj iz skripta "hide.sj"

         var tempobj = Hidescript.Hideadd;
         if (tempobj)
               {               
               tempobj.renderer.enabled = true;
               }
//raskrivaem vse Combined Mesh s imenem "Comb"
   
   for (var obj : GameObject in foundItems)
      {
         obj.renderer.enabled = true;
         hideflag=true;
      }
         }
      if(showhide == false)
         {

if(bival==true)
{
   if(hideflag==false)
   {
      for (var obj : GameObject in foundItems)
         {
            obj.renderer.enabled = false;
            hideflag=true;
         }
   }
}

         }

   }

Прошу сразу прощения, код достаточно путаный, писал долго и с кровавым потом ибо програмить не умею.
Но если у вас есть свободное время, пожалуйста помогите доработать этот код для грамотной его активации.
----------------------
qub edition
Идеальное общество это общество где каждый станет настолько эгоистом, что начнёт понимать, что делая недоброе другому получит тоже в ответ. (око за око, с прощением)
iqubik
UNIт
 
Сообщения: 74
Зарегистрирован: 11 июн 2009, 13:38
Откуда: Stavropol
  • Сайт
  • ICQ

Re: Скрыть показать группу объектов по условию

Сообщение iqubik 14 сен 2009, 13:35

Вопрос решён.
Во вложенном:
Сцена в которой есть изначально скрытые кубы.
Если подойти к центральному видимому кубу на дистанцию меньше 4ёх попугаев и при этом смотреть на него то невидимые кубы проявяться, если войти в зону действия неидимого коллайдера этого куба, то невидимые кубы будут постоянно видимы, вне зависомости от того куда смотрит игрок.
Если выйти из зоны коллайдеро-триггера центрального куба, то вновь проверяется условие видимости и расстояния до объекта.
У вас нет доступа для просмотра вложений в этом сообщении.
----------------------
qub edition
Идеальное общество это общество где каждый станет настолько эгоистом, что начнёт понимать, что делая недоброе другому получит тоже в ответ. (око за око, с прощением)
iqubik
UNIт
 
Сообщения: 74
Зарегистрирован: 11 июн 2009, 13:38
Откуда: Stavropol
  • Сайт
  • ICQ

Re: Скрыть показать группу объектов по условию

Сообщение Kvant 14 сен 2009, 14:31

Помоему можно сделать проще.
Поставить коллайдер не за дверью, а перед ней. Как только игрок подходит к двери, - внутренности подгружаются.
Kvant
UNец
 
Сообщения: 14
Зарегистрирован: 30 июн 2009, 14:52

Re: Скрыть показать группу объектов по условию

Сообщение iqubik 14 сен 2009, 18:34

Kvant писал(а):Помоему можно сделать проще.
Поставить коллайдер не за дверью, а перед ней. Как только игрок подходит к двери, - внутренности подгружаются.

А когда он находит внутрь помещения?)
дверь с коллайдером останется за плечами, и внутренности кабинета пропадут.
Понимаю что можно ввести простую булевую переменную, вот только как определить с какой стороны коллайдера вышел игрок?
----------------------
qub edition
Идеальное общество это общество где каждый станет настолько эгоистом, что начнёт понимать, что делая недоброе другому получит тоже в ответ. (око за око, с прощением)
iqubik
UNIт
 
Сообщения: 74
Зарегистрирован: 11 июн 2009, 13:38
Откуда: Stavropol
  • Сайт
  • ICQ

Re: Скрыть показать группу объектов по условию

Сообщение Neodrop 14 сен 2009, 18:38

Почему пропадут? Тут уж от вашей программной логики зависит.
А это удобный метод, действительно.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9