Среда, 15 Августа 2018, 04:57

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » 2д платформер
2д платформер
dolt0nДата: Суббота, 29 Апреля 2017, 08:07 | Сообщение # 1
был не раз
Сейчас нет на сайте
День добрый, товарищи. Как реализовать подкат? Нужно, чтобы персонаж проходил под препятствием по нажатию клавиши и выходил из этого состояния через время.
Насколько я понимаю, делается это рейкастами, отключением\включением коллайдера или слоями. Но может есть что-то проще? Если можно с примером. Заранее благодарю.
VostruginДата: Суббота, 29 Апреля 2017, 08:50 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
Я бы сделал отключением и включением соответствующих коллайдер. По-моему это самый простой вариант.



dolt0nДата: Суббота, 29 Апреля 2017, 09:06 | Сообщение # 3
был не раз
Сейчас нет на сайте
Ну это я понял. Я немного не понимаю как обратиться к нужному коллайдеру и отключить\включить его. Можно ли это проделать с коллайдером, висящем на игроке или нужно делать отдельный gameobject, цеплять на него коллайдер и kinematic regitbody? Да-да, я нубас:)
VostruginДата: Суббота, 29 Апреля 2017, 10:03 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
У тебя будет объект с Rigidbody2d, назовём его Player. Два дочерних объекта, у одного будет коллайдер обычный, у второго коллайдер для подката. Коллайдер для подката изначально выключен. На объект Player вешаем скрипт обработки. В скрипте пишешь:

Код
void Update() {
if(Input.GetKeyUp("R")) {
   EnableTackleCollider();
   StartCoroutine(EbableStayCollider(1f)); // 1f - длительность подката в секундах
}
}

IEnumerator EbableStayCollider(float delay) {
  yield return new WaitForSeconds(delay);
  EnableStayCollider();
}

void EnableStayCollider() {
transform.Find("StayCollider").gameObject.SetActive(true);
transform.Find("TackleCollider").gameObject.SetActive(false);
}

void EnableTackleCollider() {
transform.Find("StayCollider").gameObject.SetActive(false);
transform.Find("TackleCollider").gameObject.SetActive(true);
}


*Код приведён без нужных проверок, флагов и кеширования объектов.

Структура объекта:
Player
- StayCollider
- TackleCollider




dolt0nДата: Суббота, 29 Апреля 2017, 10:47 | Сообщение # 5
был не раз
Сейчас нет на сайте
Спасибо тебе огромное, мил человек! Плюсик в карму:)
Один вопрос: если я этот фрагмент кода добавляю в общий controller, то фрагмент не работает, почему так? Отдельным скриптом все отлично.


Сообщение отредактировал dolt0n - Суббота, 29 Апреля 2017, 11:00
VostruginДата: Суббота, 29 Апреля 2017, 13:44 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
dolt0n, нужен текст ошибки. Навскидку сложно сказать, возможно дублируется метод Update()?



dolt0nДата: Суббота, 29 Апреля 2017, 14:13 | Сообщение # 7
был не раз
Сейчас нет на сайте
Ошибок никаких нет. Просто не работает. Не дублируется)
Ладно, попробую разобраться. Еще раз спасибо:)
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » 2д платформер
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2018 Рейтинг