Преодоляване на високи препятствия
Здравейте всички! Имам затруднение, не знам как да направя така, че героят да може да преодолява препятствия, които не са високи / да ходи по стълби?
Повечето герои имат Capsule Collider, който предотвратява падането на героя през обекти. Радиусът на капсулата определя върху какви обекти може да се "катери" героят. Направих сцена, в която поставих герой и стъпала с различна височина. Ако радиусът на Capsule Collider на героя е 0,5, тогава героят ще може да преодолее цялото стълбище без никакви проблеми. Но размерът на колайдера е много по-голям от размера на героя, което не е много добре. Ако радиусът на капсулата се намали до 0,2, тогава героят дори няма да изкачи първото стъпало. Какво да правя?
По-долу ще опиша какво ми дойде на ум в момента след шумолене в мрежата.
№ 1 Допълнителен колайдер
Направих радиуса на Capsule Collider на героя = 0,2, това ще бъде "основният" колайдер, който ще взаимодейства с всички колайдери в сцената. Вътре в героя създадох празен GameObject, прикачих към него Capsule Collider с радиус = 0,5, поставих този GameObject в слоя "ColliderForStairs". Поставих стъпалата на стълбите върху слоя "Стълби". След това направих така, че колайдерите, намиращи се в слоя "ColliderForStairs", взаимодействат САМО с колайдерите от слоя "Stairs". Това може да се направи в настройките на физиката на проекта Edit -> Настройки на проекта -> Физика или с Physics.IgnoreLayerCollision.
Всичко работи перфектно! Но има минус - трябва да преместите всички обекти, на които героят може да се изкачи, на отделен слой.
№2 "Левитация" на колайдера
Въпросът е, че колайдерът на героя не започва от самите крака на героя, а по-скоро левитира на разстояние от пода.
Приложих го по следния начин. Ще направя резервацияче вместо готов префаб на персонаж от 3-то лице, използвах само 3D модел, за да не влизам в конфликт с контролните скриптове. Към 3D модела прикрепих компонент Rigidbody и капсулен колайдер с капсула, повдигната на 0,4 от земята. За да контролирам на какво разстояние от земята е капсулата, изстрелвам лъч с дължина 0,4 от дъното на капсулата. Ако лъчът намери обект под капсулата, тогава премахвам способността на героя да се движи по оста Y, като поставя отметка в квадратчето Y в колоната Freeze Position на компонента Rigidbody. Ако лъчът не намери нищо под себе си на разстояние 0,4, тогава позволявам на героя да се движи по оста Y, така че да може да падне.
Изглежда, че работи, но усещам, че изпълнението не е много правилно или може би самата идея.
Какво казваш? Как да накарате героя да не се опира на някои невисоки предмети (включително стълби), а да се „изкачи“ върху тях?
Re: Преодоляване на ниски препятствия / изкачване по стълби
невероятна способност за извайване на патерици, но с правилния подход към проблема и въпроса http://docs.unity3d.com/en/current/Manual/class-CharacterController.html Step Offset
PS тази тема трябва да бъде поставена в шаблоните "как да задам въпрос".
Re: Преодоляване на ниски препятствия / изкачване по стълби
Re: Преодоляване на ниски препятствия / изкачване по стълби
О, хайде.. За целите си е добре, но ако се комбинира с IK, изглежда добре. Не, не казвам, че е перфектен, но вече е готов и функционира.
Re: Преодоляване на ниски препятствия / изкачване по стълби
В това съм майстор
Но сериозно, какво ще стане, ако героят не използва Character Controller? Тук вземаме стандартния герой на Unity 5 - Итън, който не еизползва Character Controller. Как да го накарате да изкачва ниски препятствия? Значи няма друг избор, освен да използвате контролера на знаци?
Re: Преодоляване на ниски препятствия / изкачване по стълби
В това съм майстор
Но сериозно, какво ще стане, ако героят не използва Character Controller? Да вземем стандартния герой на Unity 5 - Ethan, който не използва Character Controller. Как да го накарате да изкачва ниски препятствия? Значи няма друг избор, освен да използвате контролера на знаци?
Re: Преодоляване на ниски препятствия / изкачване по стълби
Тази идея също се появи, но не намерих къде е сценария, кажете ми, моля
Можете ли да обясните накратко идеята? Няма да го правя сега, но ще опитам по-късно. С помощта на IK можете да накарате героя да стъпи красиво на стъпалата, но как това помага на колайдера да изкачи тези стъпала?
Ще кажа, че не са такива идеи, въпреки че аз самият смятам, че идеите не са много добри.
#1 Допълнителен колайдер Тъй като ще използвам Final IK, за да разкрася моите проекти, който съдържа решения за краката на IK, публикувах въпрос за това как да реша проблема в официалната нишка за Final IK. Авторът на Final IK стигна до извода, че е необходимо да се направи допълнителен колайдер с по-голям радиус, взаимодействащ само със стълби. Но не е склонно да плъзнете всички детайли, които героят може да изкачи, в отделен слой.
№2 "Левитация" на колайдера Може би греша, но съдейки по снимките на Locomotion System, те карат капсулата да левитира над земята на известно разстояние. Мислех да изтегля Unity 4, за да видя.
Въпреки че реших да направя прост герой, базиран на контролера на символи,да може да се разхожда из сцената. Разбирам, че всички използват Character Controller, с изключение на waruiyume?
Re: Преодоляване на ниски препятствия / изкачване по стълби
Re: Преодоляване на ниски препятствия / изкачване по стълби
Идеята е интересна, но все пак е същата - има много стъпки и страни, където трябва да отиде героят. Ако говорим за стълби, тогава е по-добре да изключите стъпковите колайдери и да поставите общ невидим колайдер на едно стълбище, както писа getAlex.
Re: Преодоляване на ниски препятствия / изкачване по стълби
пространство от имена Player < публичен клас StandOnGraund : MonoBehavior < частен Rigidbody rigidbodyP ; частен Ray rayP ;
public float височина = 1; публична LayerMask walkableMask = - 1;
вътрешна празнота Awake() < твърдо тялоP = GetComponent(); rayP = нов лъч ( Vector3. нула, Vector3. надолу); >
вътрешна празнота FixedUpdate ( ) < RaycastHit хит; лъч П. произход = трансформация. позиция + Вектор3. нагоре *височина; if ( Physics. Raycast ( rayP, out hit, height * 2, walkableMask ) ) < Вектор3 поз = трансформация. позиция; поз. y = хит. точка. y; трансформиране. позиция = позиция;
отстраняване на грешки. DrawRay (хит. точка, Vector3. нагоре, Цвят. червен);
Vector3 velo = твърдо тялоP. скорост ; if ( velo. y
waruiyume AdeptСъобщения: 5076Регистриран: 30 октомври 2010 г., 05:03От: Ростов на ДонRe: Преодоляване на ниски препятствия / изкачване по стълби
Locomotion System няма да може да го вземе в близко бъдеще. Ако намеря нещо интересно, ще го публикувам.
Харесва ми вашето решение, въпреки че все още не съм имал време да го тествам. Възникнаха няколко въпроса:
1) transform.позиция се намирав краката на героя, а височината е разстоянието от краката (от transform.position) на героя до началото на Capsule Collider?
2) Защо толкова дълъг лъч = височина * 2? Няма ли това силно да дръпне героя на земята преди време?