Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 23.03.2016
Сообщений: 8

Ползком под блоком

19.03.2017, 14:47. Показов 1304. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую, есть персонаж и блок прикрепленный к потолку, я сделал так чтобы при нажатии клавиши присесть, BoxCollider2D персонажа становился ниже блока (который тоже имеет BoxCollider2D), имитируется приседание и персонаж должен ползком пройти под блоком, но когда встаешь под блок и отпускаешь приседание персонаж оказывается на половину в нижнем коллайдере в полу. Как мне сделать чтобы персонаж оставался в положении сидя (в присядь) под этим блоком?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void Update(){
        //Тут персонаж прыгает
        if (grounded && Input.GetKeyDown (GameMenu.keys[4])) {
 
            GetComponent<Rigidbody2D>().AddForce (new Vector2(0f,jumpForce));
        }
        //Тут персонаж ускаряется на кнопку ускориться
        if (Input.GetKey(GameMenu.keys[6]))
        GetComponent<Rigidbody2D>().velocity = new Vector2 (move * maxSpeed * 2, GetComponent<Rigidbody2D>().velocity.y);
        else
        {
            //Тут персонаж двигается нормально
            GetComponent<Rigidbody2D>().velocity = new Vector2(move * maxSpeed, GetComponent<Rigidbody2D>().velocity.y);
            //Тут персонаж начинает двигаться сидя
            if (Input.GetKey(GameMenu.keys[5]))
            {
                bc = this.GetComponent<BoxCollider2D>();
                bc.size = new Vector2(Convert.ToSingle(1.05), Convert.ToSingle(0.48));
                bc.offset = new Vector2(0, Convert.ToSingle(- 0.27));
                GetComponent<Rigidbody2D>().velocity = new Vector2(move * maxSpeed / 2, GetComponent<Rigidbody2D>().velocity.y);
            }
            //Тут персонаж всает как только отпускается кнопка присесть
            else
            {
                GetComponent<Rigidbody2D>().velocity = new Vector2(move * maxSpeed, GetComponent<Rigidbody2D>().velocity.y);
                bc = this.GetComponent<BoxCollider2D>();
                bc.size = new Vector2(Convert.ToSingle(1.05), Convert.ToSingle(1.78));
                bc.offset = new Vector2(0, Convert.ToSingle(0.27));
            }
        }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.03.2017, 14:47
Ответы с готовыми решениями:

Текст под основным блоком
Добрый вечер Подскажите пжлст, можно ли в css прописать один раз текст под основной блок (как на картинке), чтобы он там поселился и...

Сделать тень под блоком
Необходимо сделать полукруглую тень под блоком, с учетом блок будет растягиваться на всю ширину страницы, то есть будет адаптивным.

Прозрачность блока под блоком
Доброго времени суток. Подскажите как правильно сверстать блок с текстом WE ARE который абсолютно позиционирован, а под ним бордер блока H1...

2
33 / 32 / 10
Регистрация: 07.08.2012
Сообщений: 148
19.03.2017, 17:28
Лучший ответ Сообщение было отмечено XpycTee как решение

Решение

наверное самый простой вариант это при коллизии с потолком делать его сидячим, но возможно будет кривовато моргать.

или как у вас сделана проверка (предполагаю граунд поинты) на то что персонаж на "земле", вот тоже самое сделайте для потолка, но только выборочно для блоков потолка.

сам не делал такого, только догадки.
1
1 / 1 / 0
Регистрация: 23.03.2016
Сообщений: 8
20.03.2017, 14:29  [ТС]
Askfor, добавил новую проверку на барьеры, добавил слой барьеров и назначил коробке этот слой, добавил проверку barriered в
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
void Update(){
        //Тут персонаж прыгает
        if (grounded && Input.GetKeyDown (GameMenu.keys[4])) {
 
            GetComponent<Rigidbody2D>().AddForce (new Vector2(0f,jumpForce));
        }
        //Тут персонаж ускаряется на кнопку ускориться
        if (Input.GetKey(GameMenu.keys[6]))
        GetComponent<Rigidbody2D>().velocity = new Vector2 (move * maxSpeed * 2, GetComponent<Rigidbody2D>().velocity.y);
        else
        {
            //Тут персонаж двигается нормально
            GetComponent<Rigidbody2D>().velocity = new Vector2(move * maxSpeed, GetComponent<Rigidbody2D>().velocity.y);
            //Тут персонаж начинает двигаться сидя
            if (Input.GetKey(GameMenu.keys[5]))
            {
                bc = this.GetComponent<BoxCollider2D>();
                bc.size = new Vector2(Convert.ToSingle(1.05), Convert.ToSingle(0.48));
                bc.offset = new Vector2(0, Convert.ToSingle(- 0.27));
                GetComponent<Rigidbody2D>().velocity = new Vector2(move * maxSpeed / 2, GetComponent<Rigidbody2D>().velocity.y);
            }
            //Тут персонаж всает как только отпускается кнопка присесть
            else
            {
                if (barriered)
                {
                    bc = this.GetComponent<BoxCollider2D>();
                    bc.size = new Vector2(Convert.ToSingle(1.05), Convert.ToSingle(0.48));
                    bc.offset = new Vector2(0, Convert.ToSingle(-0.27));
                    GetComponent<Rigidbody2D>().velocity = new Vector2(move * maxSpeed / 2, GetComponent<Rigidbody2D>().velocity.y);
                }
                else
                {
                    GetComponent<Rigidbody2D>().velocity = new Vector2(move * maxSpeed, GetComponent<Rigidbody2D>().velocity.y);
                    bc = this.GetComponent<BoxCollider2D>();
                    bc.size = new Vector2(Convert.ToSingle(1.05), Convert.ToSingle(1.78));
                    bc.offset = new Vector2(0, Convert.ToSingle(0.27));
                }
                
            }
        }
Теперь перс подходя к блоку сам приседает, мне лишь осталось поставить эту проверку на правильное место чтобы когда подходишь к блоку нужно было нажать "Присесть" и когда отпускаешь "Присесть" под блоком он не вставал.
Спасибо за наводку .

Добавлено через 20 минут
Askfor, Готово:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Тут персонаж встает как только отпускается кнопка присесть
            else
            {
//Проверка нет ли сверху барьера.
                if (!barriered)
                {
                    GetComponent<Rigidbody2D>().velocity = new Vector2(move * maxSpeed, GetComponent<Rigidbody2D>().velocity.y);
                    bc = this.GetComponent<BoxCollider2D>();
                    bc.size = new Vector2(Convert.ToSingle(1.05), Convert.ToSingle(1.78));
                    bc.offset = new Vector2(0, Convert.ToSingle(0.27));
                }
//Если ничего нет то можно вставать
                else
                {
                    bc = this.GetComponent<BoxCollider2D>();
                    bc.size = new Vector2(Convert.ToSingle(1.05), Convert.ToSingle(0.48));
                    bc.offset = new Vector2(0, Convert.ToSingle(-0.27));
                    GetComponent<Rigidbody2D>().velocity = new Vector2(move * maxSpeed / 2, GetComponent<Rigidbody2D>().velocity.y);
                }
 
            }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.03.2017, 14:29
Помогаю со студенческими работами здесь

Меню бургер пропадает под блоком
Сделал выпадающее меню(topnav) для адаптации при маленьких разрешениях, до 1010px, но оно пропадает при прокручивании через блок laptop....

Как сделать блок под блоком?
Всем привет, вот такой вопрос, помогите пож... Как добавить еще блоки под левый блок, что бы не накладывались... И еще, как в...

Фон под блоком <blockquote> налазит на изображение
Вот ситуация. Нижний информационный блок blockquote растягивает фон на всю ширину, а надо, чтобы он вместе с текстом поместился левее...

Почему блок под блоком не выравнивается по центру?
Добрый день! Слепил простенький пример. &lt;!DOCTYPE HTML&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;Trial&lt;/title&gt; &lt;style type=&quot;text/css&quot;...

Cкрыть содержимое под прозрачным фиксированным блоком
Как скрыть контент который попадает под фиксированный ПРОЗРАЧНЫЙ блок, при прокрутке допустим.?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru