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. Моделирую, текстурирую, анимирую.