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



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

Корневой компонент 
В  предыдущем  коде  мы  назначили  RootComponent  (корневой  компонент)  класса 
APickupItem  объекту  Mesh.  Элемент  RootComponent  является  частью  базового 
класса  AActor,  так  что  AActor  и  его  производные  имеют  корневой  компонент. 
Корневой компонент в основном подразумевает то, что он будет ядром объекта, а 
также будет определять как вы сталкиваетесь с объектом. Объект RootComponent 
определён в файле Actor.h, как показано в следующем коде: 
/** 
 * 
Примитив столкновения, который определяет преобразование (местоположение, 
вращение, масштаб) этого актора. 
 */ 
UPROPERTY() 
class USceneComponent* RootComponent; 
Таким  образом,  создатели  UE4  намеревались  сделать  так,  чтобы  RootComponent 
всегда  был  ссылкой  на  примитив  столкновения.  Иногда  примитив  столкновения 
может  быть  в  форме  капсулы,  в  остальных  случаях  в  форме  сферы  или  даже 
прямоугольной формы, или может быть произвольной формы, как в нашем случае, 
с  сеткой.  Это  редкий  случай,  когда  персонаж  должен  иметь  корневой  компонент 
прямоугольной  формы,  потому  что  углы  прямоугольника  могут  задевать  стены. 
Обычно предпочитаемы круглые формы. Свойство RootComponent показывается в 
блупринтах, где вы можете просматривать его и манипулировать им.  


211 | 
С т р а н и ц а
 
 
 
Вы можете редактировать корневой компонент ProxSphere в блупринтах, как 
только вы создадите блупринт основанный на классе PickupItem 
И наконец, функция Prox_Implementation осуществляется следующим образом:
 
void APickupItem::Prox_Implementation( AActor* OtherActor, 
UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, 
const FHitResult & SweepResult ) 

// 
если актор, с которым произошло пересечение, НЕ является игроком
// 
вы просто должны вернуться 
if( Cast( OtherActor ) == nullptr ) 

    return

// 
Получаем ссылку на аватар игрока, чтобы дать ему предмет 
AAvatar *avatar = Cast( UGameplayStatics::GetPlayerPawn( GetWorld(), 0 ) ); 
// 
Позволяем игроку подбирать предмет 
// 
Обратите на ключевое слово this! 
// 
Это то, как _this_ Pickup может ссылаться на само себя. 
avatar->Pickup( this ); 
// 
Получаем ссылку на контроллер 
APlayerController* PController = GetWorld()- >GetFirstPlayerController(); 
// 
Получаем ссылку на HUD из контроллера 
AMyHUD* hud = Cast( PController->GetHUD() ); 
hud->addMessage( Message( Icon, FString("Picked up ") + FString::FromInt(Quantity) + 
FString(" ") + Name, 5.f, FColor::White, FColor::Black ) ); 


212 | 
С т р а н и ц а
 
 
Destroy(); 
}
   
Вот  пара  очень  важных  подсказок:  первая,  нам  надо  получить  доступ  к  паре 
глобальных  функций,  чтобы  получить  доступ  к  объекту,  который  нам  нужен.  Есть 
три  главных  объекта,  к  которым  у  нас  будет  доступ  через  эти  функции,  которые 
управляют  HUD:  контроллер  (APlayerController),  HUD  (AMyHUD),  и  сам  игрок 
(AAvatar). Есть только один из каждого из этих типов объектов в экземпляре игры. 
UE4 делает нахождение их лёгким.  


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




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

    Басты бет