Я збирався опублікувати посилання на блог бази астероїдів про ворога Уокера, коли помітив у коментарі кармінгтон, який вже пов'язаний зі статтею Гамасутри .
Напевно, варто надати цьому трохи більше наочності та пояснень як відповідь сама по собі.
Хитрість - це радіопередачі . Вони дозволяють вашому коду відсканувати вздовж лінії на предмет зіткнення.
Щоб Уокер добре вирівнявся до поверхонь, вони вистрілюють два промені вниз на місцевість, один з лівої сторони Уокера та один з правого боку (червона та жовта лінія вгорі).
Від кожного об’єкта RaycastHit2D можна отримати нормальний вектор, що вказує перпендикулярно поверхні (пурпурові та зелені лінії). Упорядковуючи нормалі з двох хітів, ви отримуєте відповідну орієнтацію для свого персонажа, яка добре відображає основну місцевість (блакитна лінія).
Ви можете застосувати силу вниз по цій лінії орієнтації, щоб утримувати характер притиснутого до місцевості (хоча це може спричинити деяке ковзання, якщо тертя низьке), або вручну розташувати символу в середній точці перетину променів, як це робиться з Уокером.
Ви хочете поступово змішувати орієнтацію персонажа, щоб утримати характер не вібрувати чи виглядати робототехнічним (подивіться, як нормально різко змінюється, коли Уокер переходить кут, але тіло плавно рухається).
Якщо у вас є гострі кути на вашій місцевості, ви, ймовірно, захочете трохи нахилити ці промені всередину - так, якщо павук пройде повз край скелі 90 градусів, вищий промінь вдарить об обличчя скелі.
Команда бази астероїдів також знімає короткий промінь у напрямку руху Уокера (не показано), який перекриває промінь на цій стороні, якщо він потрапляє на місцевість. Це забезпечує, що ходок не застрягає, коли ходить у 90-градусний увігнутий кут.
Згідно з документами, двовимірне випромінювання відрізняється від тривимірного тим, що виявляє колайдери, в межах яких починається промінь. Це звучить для мене рибно, але якщо тестування підтвердить це, ви захочете скористатися шаром маски, щоб обмежити промені, щоб виявити лише місцеві колайдари, що піднімаються на альпініст.