Небольшой вопрос по скрипту для двери.

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

Re: Небольшой вопрос по скрипту для двери.

Сообщение Courvee 21 апр 2010, 08:06

Подведем итоги. Сразу скажу всем огромное спасибо,, за помощь. Вот скрипт для двери. Позволяет: Задать звуки для двери, выбрать нужную дверь, и отобразить иконку, когда мы находимся в триггере. Для работы скрипта нужна связка EmptyObject(Box collider(trigger)) и сама дверь с 2мя анимациями open на открытие, и close на закрытие. Ниже сам скрипт. Написал с комментариями, дабы могли понять даже новички, которые часто задают много лишних вопросов.

Код: Выделить всё
var OpenDoorIcon : Texture2D;                            /*иконка дающая понять, что можно открыть дверь*/
var TargetDoor : GameObject;                             /*Указываем дверь, которую будем открывать*/
var DoorOpenSound : AudioClip;                            /*Ставим звук на открытие двери*/
var DoorCloseSound : AudioClip;                           /*А это звук на закрытие двери*/
var DoorOpened : boolean = false;                      /*Переменная для скрипта, хранящая информацию открыта дверь или нет*/
var Timer : float = 0.0;                                      /*Переменная таймера. Нужна для закрытия двери по этому таймеру*/
var DoorStayOpenTime = 4;                                /*Время в секундах -1, которое дверь будет оставаться открытой. -1 Потому что первую секунду занимает анимация открытия*/
var IconAppear : boolean = false;

function Update ()                                            /*Стандартная функция, котороая обновляется каждый кадр*/
{
   if (DoorOpened)                                             /*Оператор определяющий условия выполнения скрипта: Если (Изменена данная переменая)...*/
   {
      Timer += Time.deltaTime;                            /*...то Увеличиваем с каждой секундой таймер на единицу*/
   }
   if (Timer >= DoorStayOpenTime)                      /* Если (Таймер больше, или равен времени указанному в переменной выше...*/
   {
      TargetDoor.animation.CrossFade("close");                  /*... то проигрываем анимацию закрывания двери. Целевая дверь.Анимация. Перекрестная ("Имя анимации")*/
      TargetDoor.audio.PlayOneShot (DoorCloseSound);       /* затем проигрываем звук закрытия  двери. Целевая дверь.Звук.Играть один раз (переменная на закрывающий звук)*/
      DoorOpened = false;                                              /* меняем состояние переменной, на выкл, что бы остановить таймер*/
      Timer = 0;                                                            /*сбрасываем таймер на ноль, что бы скрипт можно было запустить снова*/
   }
}

function OnTriggerEnter ()                                             /*функция, срабатвающая в тот момент, когда заходим в триггер*/
{
   IconAppear = true;                                                    /*говорим что нужно отоброжать иконку*/
}

function OnGUI()                                                          /*функция*/
{    
   if (IconAppear == true)
   {
      GUI.Label (Rect (Screen.width*0.5-OpenDoorIcon.width*0.5 , Screen.height-100 , OpenDoorIcon.width, OpenDoorIcon.height), OpenDoorIcon);  /*отоброжаем (прямоугольник (его ширина, его высота, ширина иконки, высота иконки) отоброжаемая иконка)*/
   }
}

function OnTriggerStay ()                                              /*функция, работающая только в тот момент, когда вы находитесь внутри триггера (или касаетесь его)*/
{
   if (Input.GetKeyDown (KeyCode.E) && (DoorOpened == false))       /* Если (нажата клавиша(Е) и (переменная равна выкл)...*/
   {
      DoorOpened = true;                                                               /*... то включаем переменную, что бы запустить таймер, который через нужное количество времени закроет нашу дверь*/
      TargetDoor.animation.CrossFade("open");                                   /* проигрываем анимацию открывания двери*/
      TargetDoor.audio.PlayOneShot (DoorOpenSound);                        /* проигрываем звук открывания двери. важно что бы звуки стояли за анимацией. в этом случае если звук потеряется, анимация всё равно будет работать*/
    }   
}

function OnTriggerExit ()                                                                /*функция срабатывающая при выходе из триггера*/
{
   IconAppear = false;                                                                    /*говорим скрипту не отображать иконку*/
}


Моя специализация: 3D. Моделирую, текстурирую, анимирую.
Аватара пользователя
Courvee
UNIт
 
Сообщения: 91
Зарегистрирован: 19 фев 2010, 08:11
Откуда: Россия, г. Оренбург
  • Сайт
  • ICQ

Re: Небольшой вопрос по скрипту для двери.

Сообщение Courvee 22 апр 2010, 10:21

Обнаружил ошибку, не пойму что не так. Когда в сцене одна дверь, то всё отлично, когда две, вторая уже не закрывается... думаю дело в таймере, но как исправить не знаю.
Моя специализация: 3D. Моделирую, текстурирую, анимирую.
Аватара пользователя
Courvee
UNIт
 
Сообщения: 91
Зарегистрирован: 19 фев 2010, 08:11
Откуда: Россия, г. Оренбург
  • Сайт
  • ICQ

Re: Небольшой вопрос по скрипту для двери.

Сообщение Battle Angel Alita 22 апр 2010, 12:44

используй префиксы public/private (C#), незнаю как они в яве называются
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

Re: Небольшой вопрос по скрипту для двери.

Сообщение Courvee 22 апр 2010, 12:51

в (js) так же называются на сколько я знаю.
Моя специализация: 3D. Моделирую, текстурирую, анимирую.
Аватара пользователя
Courvee
UNIт
 
Сообщения: 91
Зарегистрирован: 19 фев 2010, 08:11
Откуда: Россия, г. Оренбург
  • Сайт
  • ICQ

Пред.

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

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

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