У пачатку дадайце да вашага персанажа новы сцэнар. Назавіце яго сцэнар PlayerMovement. Спачатку нам спатрэбіцца спасылка з сцэнара руху гульца на кантролер персанажаў. Сцэнарый загадвае перамясціць персанажа.
У пачатку мы ствараем зменную:
публічны кантролер CharacterController2D;
Тады ў вас ёсць магчымасць перацягнуць кантролер персанажаў на вольнае месца.
Для руху неабходна вызначыць кірунак і хуткасць руху. Для гэтага вам спатрэбіцца ўвод з плэера:
Клавіша са стрэлкамі налева або A = 1
Клавіша са стрэлкай направа або D = -1
Тое ж самае з кантролерам.
horizontalMove = Input.GetAxisRaw(“Гарызантальны”);
Зона абнаўлення арганізуе ўвод з плэера.
FixedUpdate выкарыстоўваецца для фізікі. Гэтая функцыя абавязковая.
Стварыце іншую зменную:
паплавок horizontalMove = 0f;
FixedUpdate перамяшчае персанажа.
void FixedUpdate()
{
controller.Move (horizontalMove, ілжыва, ілжыва);
}
Першы ілжывы знак азначае, што гулец не павінен сядзець на кукішках, другі - за тое, што ён не павінен скакаць.
У сцэнары кантролера гульца неабходна вызначэнне Move:
публічная перамяшчэнне пустаты (павольны ход, прысяданне, прыскок)
{}
У якасці наступнай зменнай вам трэба:
публічны паплавок runSpeed = 40f;
Уваходныя дадзеныя прайгравальніка памнажаюцца на хуткасць бегу:
horizontalMove = Input.GetAxisRaw ("Гарызантальны") * runSpeed;
Калі гулец рухаецца налева і направа, ход будзе на -40 і 40.
Рух таксама памнажаецца на Time.fixedDeltaTime.
Time.fixedDeltaTime - час з моманту апошняй выкліку функцыі FixedUpdate. Гэта паказвае, што рух адбываецца на аднолькавую велічыню, незалежна ад таго, як часта выклікаецца функцыя. Такім чынам, хуткасць персанажа аднолькавая, незалежна ад таго, што гэта за сістэмы ці платформы.
Калі пешка ўпадзе, яна можа трохі зрушыцца ў зямлю.
Вось чаму ў Rigidbody2D выяўленне сутыкненняў змяняецца з дыскрэтнага на бесперапыннае.
Для скачкоў правяраецца, ці мы націскаем клавішу пераходу ці не:
if (input.GetButtonDown(“Jump”))
{
скачок = праўда;
}
Гэта таксама павінна быць зроблена ў функцыі FixedUpdate. Інфармацыя перадаецца з дапамогай лагічнай зменнай:
bool скачок = ілжыва;
Зменная пераходу таксама дадаецца ў FixedUpdate.
Пры націску кнопкі пераходу сцэнар PlayerMovement перасылае на кантролер, які мы хочам перайсці. Пасля гэтага будзе зноў
скачок = ілжыва;
Гэта трэба вызначыць, бо мы не хочам прапускаць наперад назаўжды.
Іншая праблема заключаецца ў тым, што калі персанаж спрабуе перайсці на платформу, ён там затрымаецца. Пасля гэтага персанаж павінен саслізнуць і ўпасці. Для гэтага неабходны фізічны матэрыял. У раздзеле Праект пстрыкніце правай кнопкай мышы Стварыць-> PhysicsMaterial2D
Назавіце гэта Слізкім. Усталюйце Friction and Bounciness на 0. Вазьміце PhysicsMaterial і перацягніце яго на матэрыял з BoxCollider гульца.
Калі вы вызначылі некалькі калайдараў для галоўнага героя, вы таксама можаце прызначыць фізічны матэрыял іншым калайдарам.
Раскладка клавіятуры вызначаецца з дапамогай Unity InputManager. Вы можаце знайсці гэта ў наладах праекта.
Пстрыкніце правай кнопкай мышы кнопку пераходу і выберыце Дублікат элемента масіва. Назавіце гэта «Краўч».
Калі гульцы хочуць гуляць з дапамогай стрэлак, проста вызначце альтэрнатыўную кнопку.
Паўтарыце крокі ад скачка да прысядання:
Калі кнопка прысядання адпушчана, персанаж таксама павінен перастаць сядзець. Так што гэта не так, як скачкі. Калі гульцы хочуць гуляць з дапамогай стрэлак, проста вызначце альтэрнатыўную кнопку.
Дадайце ў функцыю абнаўлення наступнае:
інакш, калі (Input.GetButtonUp ("Crouch"))
{
прысядаць = ілжыва;
}
Каб адпаведныя раздзелы з'явіліся ў кантролеры сімвалаў, іх трэба пераключыць з прыватнага на агульнадаступны:
Цягні гэта Коллайдерякі трэба дэактываваць у адпаведным полі. Калі над вамі ёсць «столь», ваш персанаж будзе запавольвацца, калі вы націснеце кнопку прысядання.