Дверь открывается при нажатии на кнопку “E” и если персонаж находится у двери (на триггере, на котором висит скрипт)




Дверь автоматически закрывается, когда персонаж отходит.

Настройка сцены:

Объект с анимацией. Дверь.

Empty с триггером. На нем висит скрипт. В скрипте надо указать дверь с анимацией (перетащить из Hierarchy)

 

1. Надо сделать анимацию закрывания двери. Это новая анимация, но ключевые кадры такие же, что в анимации открытия, поэтому имеет смысл скопировать ключи со старой анимации и вставить новые ключи и поменять их местами.

 

2. Не забудьте у анимации открывания и закрывания убрать галочку Loop Time. Чтобы анимация не была цикличной.

3. Настройка аниматора. Аниматор двери (объекта с анимацией). Окно настроек аниматора можно найти по пути Windows -> Animator. Аниматор можно найти в Project или выделив объект с Аниматором.

Настройки стрелочки перехода из состояния покоя в открытие двери

Настройки стрелочки перехода из открытого состояния в анимацию закрытия.

4. Написание кода. Событие входа в триггер мы уже знаем. По аналогии мы используем Функцию, которая вызывается при выходе из триггера.

(имей ввиду, что “open” в коде должен писаться также, как ты назвал параметр в аниматоре (у меня это, действительно open) См. пункт 3

Текст:

private void OnTriggerExit(Collider other)

{

if (other.tag == "Player")

{

anim.SetBool("open", false);

}

}

 

Дверь открывается при нажатии на кнопку “E” и если персонаж находится у двери (на триггере, на котором висит скрипт)

Здесь просто редактируем скрипт. Читай комменты. Помни, что при содании скрипта, название файла, должно совпадать с название класса (первая строчка public class НазваниеКласса)

Текст:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class DoorScript: MonoBehaviour {

public GameObject door; // переменная объекта в котором анимация. Указывается в unity

Animator anim;//переменная, хранящая аниматор объекта с анимацией

bool enter=false;//переменная определяющая в триггере персонаж или нет

 

void Start () {//функция вызывается один раз при запуске, тут обычно инициализируют необходимые переменные

anim = door.GetComponent<Animator>();//инициализация аниматора, записываем аниматор объекта в переменную

}

 

void Update () {//функция вызывается каждый кадр, то есть постоянно и очень часто

if (Input.GetKeyDown (KeyCode.E) && enter && Inventory.key1 == true)//проверка, нажата ли кнопка E (Input.GetKeyDown (KeyCode.E))

// и (&&) равен ли enter true (enter) и (&&) есть ли ключ. Запись &&Inventory.key1 == true не нужна, если ключ не предусмотрен

{

anim.SetBool("open", true); // если условия выполнены, то меняем значение параметра в аниматоре.

}

}

 

private void OnTriggerEnter(Collider other) // функция вызывается при входе персонажа в триггер.

//Триггер висит на Empty под дверью

{

if (other.tag=="Player")//если в триггер зашел персонаж (объект с тегом "Player")

enter = true; //то enter true

}

private void OnTriggerExit(Collider other)// функция вызывается при выходе персонажа из триггера.

{

if (other.tag == "Player")//если в триггер зашел персонаж (объект с тегом "Player")

{

enter = false; //то enter false

anim.SetBool("open", false);//меняем значение параметра в аниматоре.

}

}

}

Для ключа

Персонажу создаем скрипт Inventory (инвентарь)

Код скрипта:

 

Настройки для ключа. Для него тоже надо создать скрипт keyScr

Текст скрипта

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class keyScr: MonoBehaviour {

 

void OnTriggerEnter (Collider col)

{

if (col.tag == "Player")

{

Inventory.key1=true;

Destroy (gameObject);

}

}

}


 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-06-26 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: