двоен скок

morda 29 декември 2015 г., 03:43 ч

Опитвам се да направя игра и да се науча как да правя нещо в процеса. Сега остана, включително на двоен скок.

Факт е, че в такъв скрипт има смисъл да се използва вторият (и повече) скок само в горната точка. Е, или по време на скок, натиснете бутона няколко пъти наведнъж. Това, което също е много лошо, поради това възниква грешка - ако по време на първия кадър (докато героят е на земята), ако натиснете бутона няколко пъти, тогава героят ще скочи твърде високо поради факта, че ще получи импулс 3 пъти.

Мисля, че това може да се реши чрез нулиране на скоростта Y, но не знам как. Опитах се да замразя героя и веднага да го замразя, но не помогна. Разбира се, бих искал да чуя и други варианти, ако е възможно.

P.S. Разбира се, можете да записвате цялата си физика, но аз искам да изучавам двигателя!

Re: Двоен скок.

kMotion 29 декември 2015 г. 11:51 ч

Защо такива глупости за скачане? Можете просто да проверите сблъсъка със земята, без raycasts например. Веднага след като играчът загуби сблъсъка със земята, той скочи, в този случай забранете скачането отново. Играчът вече е в скок. И ако играчът не е на земята, не натискайте бутона за скок

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 ч

Мислех за това, но може да има сблъсък отдясно или отляво на себе си. В този случай играчът ще може да се "катери" по стените. Не е добре. Друго нещо е, че това може да стане не с два raycast-а, а с един boxcast. Но. boxcast понякога е бъги, доколкото разбирам. И ако поставите спусък под краката сиюнак, ще излязат още хемороиди (според мен).

List_check_getkey_down е функция, която проверява дали някой от клавишите в списъка е натиснат. Така може да се направи по-удобна работа.

Но ти не си разбрал въпроса ми. Искам героят да скочи два (или повече) пъти. Но в такъв сценарий вторият скок е безполезен. Следователно трябва да се науча как да нулирам скоростта на движение на героя в Y.

Re: Двоен скок.

Chaz 29 декември 2015 г., 20:16 ч

Re: Двоен скок.

morda 29 декември 2015 г., 21:22 ч

Благодаря ти. По някаква причина си помислих, че е частен вектор. Досега нещата вървят така:

bool in_ground ( ) < Вектор2 vec_left = нов Вектор2 ( трансформиране. позиция. x - 0.2f, трансформиране. позиция. y ); Вектор2 vec_dn = нов Вектор2 (0, - 1); Вектор2 vec_right = нов Вектор2 ( трансформиране. позиция. x + 0.2f, трансформиране. позиция. 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 ) връща истина; връща невярно; >

void jump ( ) < ако ( in_ground ( ) ) < jump_state = 0; timer_frist_jump = 0; jumps_value = 0; > иначе ако ( 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 (нов Vector2 (0, 20)); ако (timer_frist_jump max_timer_frist_jump) timer_frist_jump += 1 * Tdt; иначе jump_state = 1; > if (( List_check_getkey ( Key_jump, 3 ) ) && (jump_state == 2 ) ) jump_state = 1 ;

ако (List_check_getkey ( Key_jump, 2 ) && ( jumps_value max_jumps ) && ( jump_state == 1 ) ) < скорост = GetComponent Rig >> ( ) . скорост ; скорост. y = 0 GetComponent Rig >> ( ) . velocity = скорост; GetComponent Rig >> ( ) . AddForce (нов вектор2 (0, force_jumps)); скокове_стойност += 1; > >

Освен това имам друг проблем, за който не мога да направя нищо. Unity 5.1.0, Ubuntu 14.04, Когато щракнете върху бутон за клип в аниматора, мишката щраква „през бутона“. Поради това не мога да създам преход. Тоест да работим с анимация като цяло. Какво може да се направи по въпроса?