Създаване на компонент за движение за система за катерене в Unreal Engine

компонент

Здравейте, казвам се Дмитрий. Създавам компютърни игри на Unreal Engine като хоби.

Както знаете, наскоро излезе Mirror's edge 2. Съдейки по прегледите на критиците, играта се оказа много слаба. И вероятно вече сте искали да направите свой собствен Mirror's edge. Така че днес ще ви покажа как да създадете компонент за движение, за да накарате героя си да се движи като героинята на Mirror's edge.

Това ще опише как да създадете компонент за движение (наричан по-нататък CD), който ще позволи на героя да: 1) Скача нагоре по стената. 2) Бягайте покрай стената. 3) Прескачайте малки препятствия 4) Ускорявайте, докато бягате непрекъснато 5) Търкаляйте се, докато натискате Shift 6) Търкаляйте се надолу по склоновете 7) Освен това ще създадем интерактивен въжен обект, върху който можете също да се търкаляте

Всички източници са дадени в края на статията.

Ако за първи път чувате за компонента за движение, тогава е най-добре да преминете през урока на Epic Games, където всичко е описано много подробно.

Използвах UCharacterMovementComponent като основен обект за cd, този компонент за движение вече позволява на героя да ходи, плува и лети.

И така, както виждаме, CD е краен автомат, който в зависимост от стойността на променливата ClimbingMode определя един или друг модел на поведение. А сега за основните методи: DoJump - Извиква се, ако героят скача. TickComponent - Най-важната функция, наричана всеки кадър. Ето основния код на работа. SetClimbMode - Превключва CD-то от едно състояние в друго DefineClimbMode - Определя в кое състояние трябва да премине CD-то. CanSetClimbMode - определя дали CD-то може да превключи в желаното състояние в момента. CheckDeltaVectorInCurrentState - Получава вектора, към който трябва да се придвижи знакъти ако символът все още може да бъде в даденото състояние в новите координати, тогава той връща true, коригираните координати и ъгъла на завъртане на знака, в противен случай false. MoveTo – Премества героя в желаната позиция.

Обектът UCharacterMovementComponent работи само във връзка с обекта ACharacter. Следователно класът на нашия герой ще бъде извлечен от ACharacter и това всъщност е всичко.

И тук имаме първия проблем. Въпросът е, че обектът ACharacter ражда обекта UCharacterMovementComponent в своя конструктор. Но това, от което се нуждаем, не е UCharacterMovementComponent, а UClimbingPawnMovementComponent. За да може ACharacter да създаде UClimbingPawnMovementComponent, конструкторът на AClimbingCharacter трябва да бъде променен от това:

Сега ACharacter ще генерира това, от което се нуждаем.

Това е интересно:Сигурно сте забелязали думата Супер, какво означава? Думата Super ще замени името на базовия клас за обекта, в който се използва. Тоест, ако напиша Super::Tick(), това означава, че съм извикал метода Tick от базовия клас на обекта.

След това ще говоря за основните методи:

Сигурно сте били привлечени от метода ChangeView. Да, като натиснете бутона F, можете да превключите от изглед от първо лице към изглед от трето лице. Дори и да не е в съответствие с канона.

Методите MoveForward, MoveRight, CameraPitch, CameraYaw, CrouchFunk, UnCrouchFunk, Jump са отговорни за въвеждането от клавиатурата и мишката.

Методът NotifyActorBeginOverlap се задейства, когато знакът пресече друг обект. За всички интерактивни обекти създадох базовия клас AOverlapObject и ето го:

Този обект съдържа променлива от тип EClimbingMode, когато герой пресече този обект, неговият компонент за движение превключва в това състояние.

Досега го направихсамо един интерактивен обект AZipLine е въже, което героят хваща и търкаля надолу по него. Ако сте играли Mirror's edge, значи знаете за какво говоря.

Методът OnConstruction е подобен на функцията ConstructionScript на Blueprint, той също се извиква, когато актьорът бъде преместен или променен. Вярно е, че има малка разлика, ако в чертежа всички добавени обекти се унищожават автоматично с всяко повторно изграждане, тогава в c ++ трябва да унищожите обектите сами.

Всъщност това е всичко, както обещава изходният код. По масово искане ги публикувах в github.

Hardcore conf в C++. Каним само професионалисти.