Подвійний стрибок
morda 29 Гру 2015, 03:43
Намагаюся зробити гру та в процесі навчитися щось робити. Зараз застряг у тому числі на подвійному стрибку.
Справа в тому, що в такому скрипті другий (і більше) стрибок має сенс використовувати лише у верхній точці. Ну чи під час стрибка натискати кнопку відразу кілька разів. Що ще дуже погано, через це виникає баг - якщо під час першого кадру (поки персонаж на землі) натиснути кнопку кілька разів, то персонаж підстрибне занадто високо через те, що отримає імпульс 3 рази.
Я думаю, це можна вирішити обнулив швидкість руху по Y, але як це зробити, я не знаю. Пробував заморозити персонажа та одразу його заморозити, але не допомогло. Звичайно, хотілося б почути й інші варіанти, якщо це можливо.
P.S. Звичайно можна запиляти і повністю свою фізику, але я хочу вивчити двигун!
Re: Подвійний стрибок.
kMotion 29 груд 2015, 11:51
Навіщо для стрибків такий геморрой? Можна просто перевіряти колізію з граундом, без рейкастів, наприклад. Як тільки гравець втратив колізію із землею значить він стрибнув, у цьому випадку забороняйте стрибати ще раз. Гравець і так у стрибку. І якщо гравець не на землі не обробляйте кнопку стрибка
List_check_getkey_down(Key_jump) ось це можна прибрати та замінити на Input.GetKeyDown
Re: Подвійний стрибок.
waruiyume 29 груд 2015, 12:13
Re: Подвійний стрибок.
Cr0c 29 Гру 2015, 12:57
Re: Подвійний стрибок.
morda 29 Гру 2015, 17:14
Я думав над цим, але він може мати колізію праворуч чи ліворуч від себе. У такому разі гравець зможе "дертися" по стінах. Не добре. Інша річ, що це можна зробити не двома рейкастамами, а одним бокскастом. Але. бокскаст іноді глючить, як я зрозумів. А якщо ставити тригер під ногамигероя, то вийде геморойніше (на мій погляд).
List_check_getkey_down функція перевіряє чи натиснута одна зі списку клавіш. Таким чином, можна зробити зручніше керування.
Але ви трохи не зрозуміли моє запитання. Я хочу, щоб персонаж стрибав два (або більше) рази. Але в такому скрипті другий стрибок марний. Тому мені потрібно дізнатися, як обнулити швидкість руху персонажа Y.
Re: Подвійний стрибок.
Chaz 29 Гру 2015, 20:16
Re: Подвійний стрибок.
morda 29 Гру 2015, 21:22
Дякую. Я чомусь думав, що це приватний вектор. Поки що вийшло ось так:
bool in_ground ( ) < Vector2 vec_left = new Vector2 (transform. Position. x - 0.2f, transform. Position. y); Vector2 vec_dn = new Vector2 (0, - 1); Vector2 vec_right = new Vector2 (transform. Position. x + 0.2f, transform. Position. y);
bool phys_raycast1 = Physics2D. Raycast (vec_left, vec_dn, 0.36f, ground_layermask); bool phys_raycast2 = Physics2D. Raycast (vec_right, vec_dn, 0.36f, ground_layermask);
if (phys_raycast1 phys_raycast2) return true; return false; >
void jump ( ) < if ( in_ground ( ) ) < jump_state = 0; timer_frist_jump = 0; jumps_value = 0; > else if ( jump_state == 0 ) jump_state = 1 ; if ( ( ( jump_state == 0 ) ( jump_state == 2 ) ) && ( List_check_getkey ( Key_jump, 1 ) ) ) < jump_state = 2; GetComponent Rig >> (). AddForce (new Vector2 (0, 20)); if (timer_frist_jump max_timer_frist_jump) timer_frist_jump += 1 * Tdt; else jump_state = 1; > if ( ( List_check_getkey ( Key_jump, 3 ) ) & ( jump_state == 2 ) ) jump_state = 1 ;
if (List_check_getkey ( Key_jump, 2 ) && ( jumps_value max_jumps ) && (jump_state == 1)) < speed = GetComponent Rig >> (). velocity; speed. y = 0; GetComponent Rig >> (). velocity = speed; GetComponent Rig >> (). AddForce (new Vector2 (0, force_jumps)); jumps_value += 1; > >
А ще в мене є інша проблема, з якою я нічого не можу зробити. Unity 5.1.0, Ubuntu 14.04, При натисканні в аніматорі кнопку кліпу, мишка кликає " крізь кнопку " . Через це я не можу створити transition. Тобто взагалі працюватиме з анімацією. Що із цим можна робити?