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



Pdf көрінісі
бет229/252
Дата06.01.2022
өлшемі12,25 Mb.
#11940
1   ...   225   226   227   228   229   230   231   232   ...   252
Снаряды или дальняя атака 
Атака  с  расстояния  обычно  включает  какого-либо  рода  снаряды.  Снаряды  –  это 
например,  пули,  но  не  только.  Они  могут  также  представлять  из  себя  атаки 
магическими  разрядами  молнии  или  огненным  шаром.  Чтобы  спрограммировать 
атаку  снарядами,  вам  нужно  породить  новый  объект  и  применять  урон  к  игроку, 
только если снаряд достигает игрока.  
 
Чтобы  осуществить  базовые  пули  в  UE4,  нам  следует  выполнить  происхождение 
объекта  нового  типа.  Я  выполнил  происхождение  класса  ABullet  от  класса  AActor, 
как показано в следующем коде:  
UCLASS() 
class GOLDENEGG_API ABullet : public AActor 

GENERATED_UCLASS_BODY() 
// 
Сколько урона наносит пуля. 
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Properties) 
float Damage; 
// 
Видимая сетка – Meshдля компонента, чтобы мы могли  
// 
стреляющий объект 
UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = Collision) 
UStaticMeshComponent* Mesh; 


262 | 
С т р а н и ц а
 
 
// 
сфера, с которой вы сталкиваетесь, чтобы нанести урон 
UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = Collision) 
USphereComponent* ProxSphere; 
UFUNCTION(BlueprintNativeEvent, Category = Collision) 
void Prox( AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool 
bFromSweep, const FHitResult & SweepResult ); 
};
 
Класс ABullet имеет пару важных элементов: 

 
Переменная типа float для урона, который наносит пуля при контакте 

 
Переменная Mesh для тела пули 

 
Переменная ProxSphere, чтобы определять, когда пуля попала во что-то 

 
Функция для запуска, когда Prox замечен рядом с объектом 
Конструктор для класса ABullet должен иметь инициализацию переменной Mesh и 
переменной  ProxSphere.  В  конструкторе  мы  устанавливаем,  что  RootComponent 
будет  переменная  Mesh,  а  затем  добавим  переменную  ProxSphere  к  переменной 
Mesh. Переменная ProxSphere будет использоваться для проверки столкновения, а 
проверка  столкновения  для  переменной  Mesh  должна  быть  выключена,  как 
показано в следующем коде:  
ABullet::ABullet(const class FObjectInitializer& PCIP) : Super(PCIP) 

Mesh = PCIP.CreateDefaultSubobject(this, TEXT("Mesh")); 
RootComponent = Mesh; 
ProxSphere = PCIP.CreateDefaultSubobject(this, TEXT("ProxSphere")); 
ProxSphere->AttachTo( RootComponent ); 
ProxSphere->OnComponentBeginOverlap.AddDynamic( this, &ABullet::Prox ); 
Damage = 1; 

В конструкторе мы присвоили начальное значение 1, переменной  Damage (урон). 
Но его можно изменять в редакторе UE4, как только мы создадим блупринт класса 
ABullet.  Далее  функция  ABullet::Prox_Implementation()  должна  работать  с  уроном 
актора,  получившего  удар,  если  мы  сталкиваемся  с  другим  актором  от 
RootComponent, используя следующий код:
  
void ABullet::Prox_Implementation( AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 
OtherBodyIndex, bool bFromSweep, const FHitResult &SweepResult ) 

if( OtherComp != OtherActor->GetRootComponent() ) 

// 
не сталкиваемся ни с чем другим 
// 
кроме актора root component 
return; 

OtherActor->TakeDamage( Damage, FDamageEvent(), NULL, this ); 
Destroy(); 
}
  


263 | 
С т р а н и ц а
 
 


Достарыңызбен бөлісу:
1   ...   225   226   227   228   229   230   231   232   ...   252




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

    Басты бет