Изучаем С++ создавая игры в ue4 Уилльям Шериф Изучайте программирование С++ с интересным применением реально мира, что позволит вам создавать ваши собственные игры!



Pdf көрінісі
бет207/252
Дата06.01.2022
өлшемі12,25 Mb.
#11940
1   ...   203   204   205   206   207   208   209   210   ...   252
ContentExamples  или  из  StrategyGame,  чтобы  применить  их  в  вашей  игре.  Чтобы 
сделать  это,  обратитесь  к  разделу  Импортирование  ассетов  в  Главе  10.  Система 
инвентаризации  и  подбор  предметов.  Когда  вы  закончите  с  импортом  ассетов, 
мы сможем перейти к добавлению монстров в ваш мир.  
 
Монстры 
Мы  начнём  программировать  монстров  таким  же  способом,  как  мы 
программировали  NPC  и  PickupItem.  Во  первых,  мы  напишем  базовый  класс 
(происходящий  от  персонажа),  чтобы  представить  класс  Monster.  Затем,  мы 
выполним  происхождение  группы  схем  (blueprint)  для  каждого  типа  монстров.  У 
каждого  монстра  будет  пара  свойств  общих  со  всеми,  которые  определяют  их 
поведение. Вот общие свойства: 

 
Переменная типа float для скорости. 

 
Переменная  типа  float  для  значения  HitPoints,  обозначающего  урон  (я 
обычно  использую  тип  float  для  HP,  так  что  мы  можем  легко  сможем 
смоделировать  эффекты  истощающие  HP,  такие  как  проходить  через  поток 
лавы). 

 
Переменная int32 для опыта, получаемого при победе над монстрами.  

 
Функция UClass для добычи оставленной монстром.  

 
Переменная  типа  float  для  BaseAttackDamage  (базовый  урон  атаки) 
выполняемы при каждой атаке.  


227 | 
С т р а н и ц а
 
 

 
Переменная типа float для AttackTimeout, что является объёмом времени, на 
который монстр прерывается между атаками.  

 
Два  объекта  USphereComponents:  Один  из  них  это  SightSphere  –  как  далеко 
он может видеть. Другой это AttackRangeSphere – как далеко могут достигать 
его атаки. Объект AttackRangeSphere всегда меньше чем SightSphre.  
Выполните проиcхождение от класса Character, чтобы создать ваш класс Monster. В 
UE4 вы можете сделать это перейдя в File | Add Code To Project… и затем выбрав 
опцию Character в меню для вашего базового класса.      
Заполните  класс  Monster  базовыми  свойствами.  Убедитесь,  что  вы  объявляете 
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = MonsterProperties), так что 
свойства монстров могут быть изменены в блупринтах:  
UCLASS() 
class GOLDENEGG_API AMonster : public ACharacter 

GENERATED_UCLASS_BODY() 
// 
Насколько он быстр 
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = MonsterProperties) 
float Speed; 
// 
Единицы здоровья монстра 
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = MonsterProperties) 
float HitPoints; 
// 
Опыт получаемый от побед 
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = MonsterProperties) 
int32 Experience; 
// Blueprint 
типа предмета обронённого монстром 
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = MonsterProperties) 
UClass* BPLoot; 
// 
Объём урона получаемого от атаки 
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = MonsterProperties) 
float BaseAttackDamage; 
// 
Объём времени, необходимый монстру для отдыха 
// 
между атаками 
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = MonsterProperties) 
float AttackTimeout; 
// 
Время с последнего удара монстра, читаемое в blueprint 
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = MonsterProperties) 
float TimeSinceLastStrike; 
// 
Расстояние на котором он видит 
UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = Collision) 
USphereComponent* SightSphere; 
// 
Дальность его атаки. Визуализируемая в редакторе как сфера 
UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = Collision) 


228 | 
С т р а н и ц а
 
 
USphereComponent* AttackRangeSphere; 
};
 
Вам понадобится минимальный код в вашем конструкторе  Monster, чтобы задать 
свойства монстра. Используйте следующий код в файле Monster.cpp: 
AMonster::AMonster(const class FObjectInitializer& PCIP) : Super(PCIP) 

Speed = 20;                            // 
Скорость 
HitPoints = 20;                        // 
Здоровье 
Experience = 0;                      // 
Опыт 
BPLoot = NULL;                     // 
Трофеи 
BaseAttackDamage = 1;        // 
Урон базовой атаки 
AttackTimeout = 1.5f;             // 
Длительность атаки  
TimeSinceLastStrike = 0;       
// Прошло времени с последнего удара 
SightSphere = PCIP.CreateDefaultSubobject (this, 
TEXT("SightSphere")); 
SightSphere->AttachTo( RootComponent ); 
AttackRangeSphere = PCIP.CreateDefaultSubobject (this, 
TEXT("AttackRangeSphere")); 
AttackRangeSphere->AttachTo( RootComponent ); 
}
 
Компилируйте и запустите код. Отройте Unreal Editor и выполните происхождение 
блупринт основанного на вашем классе Monster (назовите его BP_Monster). Теперь 
мы можем начать конфигурировать свойства ваших монстров.  
Для скелетной сетки мы хотим использовать модель HeroTPP для монстра, потому 
что нам нужно, чтобы монстр мог выполнять рукопашную атаку, а HeroTPP не идёт 
с рукопашной атакой. Однако некоторые модели  в файле Maximo Animation Pack 
обладают  анимацией  рукопашной  атаки.  Итак,  скачайте  файл  Maximo  Animation 


Достарыңызбен бөлісу:
1   ...   203   204   205   206   207   208   209   210   ...   252




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет