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



Pdf көрінісі
бет198/252
Дата06.01.2022
өлшемі12,25 Mb.
#11940
1   ...   194   195   196   197   198   199   200   201   ...   252
 
 


208 | 
С т р а н и ц а
 
 
Базовый класс PickupItem  
Мы  должны  определить,  как  подбор  предметов  будет  выглядеть  в  коде.  Каждый 
подбираемый  предмет  будет  происходить  от    общего  базового  класса.  Давайте 
сейчас сконструируем базовый класс для класса PickupItem (подбор предметов).  
Базовый  класс  PickupItem  должен  наследоваться  от  класса  AActor.  Подобно  тому, 
как мы создали множество схем (blueprint) NPC от базового класса NPC, мы можем 
создать и множество схем (blueprint) PickupItem от единственного базового класса 
PickpItem, как показано на следующем скриншоте:  
 
Как только вы создадите класс PickupItem, откройте его код в Visual Studio. 
Классу APickupItem понадобится несколько элементов: 

 
Переменная FString для имени подбираемого предмета 

 
Переменная int32 для количества подбираемого предмета 

 
Переменная USphereComponent для сферы которой вы будете сталкиваться, 
чтобы подобрать предмет 

 
Переменная UStaticMeshComponent, чтобы содержать сетку 

 
Переменная UTexture2D для значка, который представляет предмет 

 
Указатель для HUD (который мы инициализируем позже) 
Вот как выглядит код в APickupItem.h: 
UCLASS() 
class GOLDENEGG_API APickupItem : public AActor 

GENERATED_UCLASS_BODY() 
// 
Имя предмета, который вы заполучаете 
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Item) 
FString Name; 
// 
Как много вы заполучаете 
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Item) 
int32 Quantity; 
// 
сфера, с которой вы сталкиваетесь, что подобрать предмет 
UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = Item) 
TSubobjectPtr ProxSphere; 


209 | 
С т р а н и ц а
 
 
// 
Сетка предмета 
UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = Item) 
TSubobjectPtr Mesh; 
// 
Значок, который представляет объект в интерфейсе пользователя/на поверхности 
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Item) 
UTexture2D* Icon; 
// 
Когда что-то попадает в ProxSphere, эта функция запускается 
UFUNCTION(BlueprintNativeEvent, Category = Collision) 
void Prox( AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool 
bFromSweep, const FHitResult & SweepResult ); 
};
    
Суть  всех  этих  объявлений  UPROPERTY(),  в  том  чтобы  сделать  APickupItem 
полностью конфигурируемым посредством схем (blueprint). Например, предметы в 
категории Pickup, в редакторе blueprint будут отображены следующим образом: 
 
В  файле  PickupItem.cpp,  мы  завершаем  конструктор  для  класса  APickupItem,  как 
показано в следующем коде: 
APickupItem::APickupItem(const class FPostConstructInitializeProperties& 
PCIP) : Super(PCIP) 

Name = "UNKNOWN ITEM"; .// 
“НЕИЗВЕСТНЫЙ ПРЕДМЕТ” 
Quantity = 0; 
// Задаём объект Unreal  
ProxSphere = PCIP.CreateDefaultSubobject(this, TEXT("ProxSphere")); 
Mesh = PCIP.CreateDefaultSubobject(this, TEXT("Mesh")); 
// 
делаем корневым объектом Mesh 
RootComponent = Mesh; 
Mesh->SetSimulatePhysics(true); 
// 
Пишем код для запуска APickupItem::Prox(), когда эта  
// 
сфера близости объекта пересекается с другим актором. 
ProxSphere->OnComponentBeginOverlap.AddDynamic(this, 
&APickupItem::Prox); 
ProxSphere->AttachTo( Mesh ); // 
очень важно! 



210 | 
С т р а н и ц а
 
 
На  первых  двух  строках  мы  выполняем  установку  значений  имени  (Name)  и 
количества  (Quantity),  которые  должны  предстать  перед  разработчиком  игры  как 
изначально  заданные.  Я  использовал  заглавные  буквы,  чтобы  разработчик  мог 
видеть, что до этого переменная ещё не устанавливалась.  
Затем,  мы  присваиваем  начальные  значения  компонентам  ProxSphere  и  Mesh 
используя  PCIP.CreateDefaultSubobject.  Недавно  инициализированные  объекты 
могут  иметь  некоторые  из  своих  начально  заданных  значений,  но  Mesh  (сетка) 
будет  стартовать  пустой.  Вам  понадобится  загрузить  саму  сетку  позже,  в 
блупринтах.  
Сетку  мы  устанавливаем,  чтобы  симулировать  реалистичную  физику,  так  что  если 
предметы  бросать  или  двигать,  то  они  будут  отскакивать  и  катиться  или 
переворачиваться.  Обратите  особое  внимание  на  строку  ProxSphere->AttachTo( 
Mesh  ).  Это  трока  говорит  вам  убедиться,  что  компонент  подбираемого  предмета 
ProxSphere  прикреплён  к  корневому  компоненту  Mesh.  Это  означает,  что  когда 
сетка двигается в уровне, то ProxSphere следует за ней. Если вы забудете этот шаг 
(или если вы сделали его как то по другому), то ProxSphere не будет следовать за 
сеткой, когда она подпрыгивает.  


Достарыңызбен бөлісу:
1   ...   194   195   196   197   198   199   200   201   ...   252




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

    Басты бет