Енуми

Използването на enumsе наистина полезен начин за разделяне и организиране на управлявано от състояние поведение, като същевременно поддържате кода си чист и лесен за четене. Enums също са чудесни за улесняване на живота на друг дизайнер или дори на себе си. Нека да тръгваме!

Селектор на трудност

Ето скрипт за трудностс частен преписнаречен Селектор на трудност. Pascal case е стандартният формат за деклариране и именуване на вашия enum. Отворете няколко къдрави скоби и избройте различните състояния, между които да превключвате. Важно е да използвате запетаяслед всяко име на състояние, като оставяте последното състояние без без запетая. Тук DifficultySelector enumима състояния за Лесно, Нормално, Трудно и Експертно. В долната част е декларирана променлива за съхраняване на текущото ниво на трудност. Можем да използваме това, за да зададем избраната трудност.

Ако предпочитате, можете да изберете да посочите вашите състояния на един ред.

По подразбиране стойноститеще работят като система от елементи. Започнете с нула и след това пребройте. Слаб, ще има intстойност 0, докато Среден ще има int >стойност 1. И Strongи OPще имат стойности intсъответно 2и 3. Ако е необходимо, можете да присвоитеразлични стойности тук, както е показано по-долу. Сега тези състояния ще върнат intстойност за тяхната твърдо кодирана стойност (2,5,8,12).

Прегледът на променливата Текуща трудност в инспекторапоказва хубав падащ селектор, който се използва за задаванена състояниена enum.

Налични са всички опции за трудност.

enumсам по себе си няма да направи нищо. Нуждае се от някаква логика, за да работи, така че нека използваме оператор switch, за да превключваме между състоянията на текущата трудност enum променлива. Има случайнаправен за всяка трудноств списъка селектор на трудност. Съобщението Debug ще отпечата на конзолата избраното ниво на трудност.

Казиране на стойности

Въпреки че не можете директно да използвате enum стойносттакато цяло число, можете да я прехвърлите като intв ситуация като тази, където искате да заредитесцена от игра въз основа на индексномер.

Поведение на врага

Използването на enumsза държавно поведение е точно това, от което се нуждае една вражеска AI система. Този EnemyBehaviorскрипт е прикрепен към няколко различни кубичниврагове в изгледа на сцената. Всички те имат 100 здраве и състояния за Патрул, Следване, Атака, Защита, Избягване и Смърт. Enum Enemy State може да се преминава през променливата current state.

В void update изпълнявам метод, наречен Change Enemy State, който засега извиква метод, който ще изпълни поведенческискрипт за действие за вражески обект.

Началото на тази функция ще влезе в действие за следващия пример, но тук Enemy State се нулира на Patrol, ако стойността int от състоянието се опитва да се премести по-високоот състоянието Смърт.

Този оператор switch използва променливата current state, за да премине през различните enum Enemy States. Вместо да включвам действително поведение на движението на врага тук, аз просто изпращам съобщение за отстраняване на грешкидо конзолата за това конкретно състояние.

Всеки от тези вражески обекти има прикачен скрипт Поведение на врага.

Това им позволява индивидуално да използват променливата Текущо състояние, за да избират собственото си поведение. Този враг тук е Патрулиращ.

Този враг Следва.

Този враг е Атакуващ.

Тук можете да видите, че всеки враг има всички налични поведения.

Ако играя играта, всеки враг изпраща свое собствено debugсъобщение до конзолата. Това обикновено би било поведение на движение, което се задейства при 60 FPS.

Вие ще искате условиеили събитиеза промяна на поведението на врага състояние. Вместо да изпълняваме този метод при актуализиране, нека използваме клавиша интервал, за да покажем как можем да променяме състоянията на поведение.

Когато се натисне клавишът за интервал, променливата на текущото състояние ще увеличи, премествайки я напред в следващото изброено състояние. След като текущото състояние премине след смърт, то се нулира на патрул.

Тук можете да видите клавиша за интервал, променящ поведението на врага enumпо време на изпълнение!

Използването на логикаи условиявъв вашите изрази за превключване е идеално за диктуване кога искате поведението на врага да се промени. Както се вижда тук, след като здраветона този враг падне под 20, състоянието Избягванеще изпълнява какъвто и да е скрипт, който включите тук. Това, което наистина трябва да направя, е да проверя изправността в предишнотосъстояние и след това да настроясъстоянието да избягватам. Тук в evade бих проверил условие за излизанеот маневрите за избягване и бих задал състоянието на друго.

Състоянието на смъртна врага е добро място за унищожаванена вражеския обект на игра!

Персонализирани класове

Нека добавим enumкъм този персонализиран клас Item. ItemType enum представлява различни типове елементи, които всеки артикул може да поиска. Тук имам Оръжие, Консумативи, Броня и Валутаза опции.

Използването на методс оператор switch дава възможност на потребителя да върне някаква информация за извиквания тип елемент, когато друг скрипт иска препраткатова.

Нека преминем към скрипт ItemDatabase, който е прикачен към празен обект в сцената. Последният ред създава нов Списъкс Елементи, наречен itemsList, и след това го инициализира.

Всеки ItemActionметод може да бъде извикан чрез itemsList List и след това да декларирате кой елементвърху който искате да извършите действие.

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

Ако трябва да съставите система за инвентаризация, вие сте напълно обгрижени между наследяване на класове, списъци, масивии сега enums !

Благодаря за четенето!