在虚幻引擎中,存在众多常见的父类,它们为游戏开发者提供了丰富的功能和强大的扩展性。本篇技术博客将重点介绍几个常见的父类,并通过案例演示它们的用法。
一、概述
虚幻引擎中有许多常用的父类,它们提供了各种功能,用于创建游戏对象、处理输入、管理游戏状态等。以下是一些常用的虚幻引擎父类:
-
AActor(Actor类):表示在虚拟场景中的一个对象。所有在游戏中出现的物体都是Actor的子类,包括玩家角色、道具、敌人等。
-
UObject:是所有虚幻对象的基类。几乎所有的虚幻引擎类都是UObject或其子类。
-
UActorComponent:表示可以被附加到Actor上的组件,用于添加额外的功能或属性。例如,MeshComponent用于处理渲染,AudioComponent用于处理声音等。
-
UGameInstance:在整个游戏实例中保持持久性数据和状态的类,通常用于保存全局性的信息。
-
UUserWidget:用于创建用户界面的基类,通过蓝图和代码可以创建各种界面元素。
-
UInputComponent:用于处理输入的组件,可以附加到Actor或Pawn上,用于响应玩家的键盘、鼠标或手柄输入。
-
UGameplayStatics:提供了在游戏中执行各种通用操作的静态类,包括生成粒子效果、播放声音等。
-
AGameSession:处理游戏会话的类,用于管理玩家连接、处理会话状态等。
-
APlayerController:控制玩家输入和视图,处理与玩家直接互动的逻辑。
-
APlayerState:表示玩家的状态,包括分数、生命等信息。
这只是虚幻引擎中一小部分常用父类的示例。根据游戏的需求,还有许多其他的父类可供使用。开发者通常会根据具体情况选择合适的父类来构建游戏对象和逻辑。
二、案例
1. AActor - Actor类
AActor
是虚幻引擎中所有场景中物体的基类,包括角色、道具、环境物体等。它提供了物体的基本功能,如位置、旋转、碰撞等。
案例1:创建一个简单的可互动的物体
// MyInteractableActor.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyInteractableActor.generated.h"
UCLASS()
class MYPROJECT_API AMyInteractableActor : public AActor
{
GENERATED_BODY()
public:
// 构造函数
AMyInteractableActor();
// 当玩家与物体交互时调用的函数
UFUNCTION(BlueprintCallable, Category = "Interaction")
void Interact();
};
// MyInteractableActor.cpp
#include "MyInteractableActor.h"
AMyInteractableActor::AMyInteractableActor()
{
// 设置物体可以被点击
SetActorEnableCollision(true);
}
void AMyInteractableActor::Interact()
{
// 处理与物体的交互逻辑
// ...
}
2. APawn - Pawn类
APawn
表示游戏中的可控制角色,它通常由玩家或AI控制。
案例2:创建一个简单的可控制角色
// MyPlayerPawn.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Pawn.h"
#include "MyPlayerPawn.generated.h"
UCLASS()
class MYPROJECT_API AMyPlayerPawn : public APawn
{
GENERATED_BODY()
public:
// 构造函数
AMyPlayerPawn();
// 处理角色的移动
void MoveForward(float Value);
void MoveRight(float Value);
};
// MyPlayerPawn.cpp
#include "MyPlayerPawn.h"
AMyPlayerPawn::AMyPlayerPawn()
{
// 设置角色的默认根组件
RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));
}
void AMyPlayerPawn::MoveForward(float Value)
{
// 处理角色的前后移动
// ...
}
void AMyPlayerPawn::MoveRight(float Value)
{
// 处理角色的左右移动
// ...
}
3. AGameModeBase - GameModeBase类
AGameModeBase
定义了游戏的规则和流程,包括游戏开始、结束等逻辑。
案例3:创建一个简单的游戏模式
// MyGameModeBase.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "MyGameModeBase.generated.h"
UCLASS()
class MYPROJECT_API AMyGameModeBase : public AGameModeBase
{
GENERATED_BODY()
public:
// 构造函数
AMyGameModeBase();
// 开始游戏
UFUNCTION(BlueprintCallable, Category = "Gameplay")
void StartGame();
};
// MyGameModeBase.cpp
#include "MyGameModeBase.h"
AMyGameModeBase::AMyGameModeBase()
{
// 设置默认的玩家控制器类
PlayerControllerClass = AMyPlayerController::StaticClass();
}
void AMyGameModeBase::StartGame()
{
// 处理游戏开始逻辑
// ...
}
4. UActorComponent - Actor组件类
UActorComponent
是虚幻引擎中附加到AActor
的组件的基类,它可以用于添加额外的功能或属性。
案例4:创建一个简单的角色组件
// MyHealthComponent.h
#pragma once
#include "CoreMinimal.h"
#include "Components/ActorComponent.h"
#include "MyHealthComponent.generated.h"
UCLASS(ClassGroup = (Custom), meta = (BlueprintSpawnableComponent))
class MYPROJECT_API UMyHealthComponent : public UActorComponent
{
GENERATED_BODY()
public:
// 构造函数
UMyHealthComponent();
// 获取当前生命值
UFUNCTION(BlueprintCallable, Category = "Health")
float GetCurrentHealth() const;
// 处理伤害
UFUNCTION(BlueprintCallable, Category = "Health")
void TakeDamage(float Damage);
};
// MyHealthComponent.cpp
#include "MyHealthComponent.h"
UMyHealthComponent::UMyHealthComponent()
{
// 设置默认的生命值
CurrentHealth = MaxHealth;
}
float UMyHealthComponent::GetCurrentHealth() const
{
return CurrentHealth;
}
void UMyHealthComponent::TakeDamage(float Damage)
{
// 处理伤害逻辑
CurrentHealth -= Damage;
if (CurrentHealth <= 0)
{
// 触发角色死亡事件
OnCharacterDeath.Broadcast();
}
}
5. UGameInstance - GameInstance类
UGameInstance
是一个在整个游戏实例中保持持久性数据和状态的类。
案例5:创建一个简单的游戏实例类
// MyGameInstance.h
#pragma once
#include "CoreMinimal.h"
#include "Engine/GameInstance.h"
#include "MyGameInstance.generated.h"
UCLASS()
class MYPROJECT_API UMyGameInstance : public UGameInstance
{
GENERATED_BODY()
public:
// 构造函数
UMyGameInstance();
// 获取玩家分数
UFUNCTION(BlueprintCallable, Category = "Gameplay")
int32 GetPlayerScore() const;
// 增加玩家分数
UFUNCTION(BlueprintCallable, Category = "Gameplay")
void AddPlayerScore(int32 Score);
};
// MyGameInstance.cpp
#include "MyGameInstance.h"
UMyGameInstance::UMyGameInstance()
{
// 设置默认玩家分数
PlayerScore = 0;
}
int32 UMyGameInstance::GetPlayerScore() const
{
return PlayerScore;
}
void UMyGameInstance::AddPlayerScore(int32 Score)
{
// 增加玩家分数
PlayerScore += Score;
}
6. UUserWidget - 用户界面控件类
UUserWidget
是虚幻引擎中用于创建用户界面的基类,它提供了创建和管理用户界面的功能。
案例6:创建一个简单的用户界面控件
// MyHUDWidget.h
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "MyHUDWidget.generated.h"
UCLASS()
class MYPROJECT_API UMyHUDWidget : public UUserWidget
{
GENERATED_BODY()
public:
// 构造函数
UMyHUDWidget();
// 更新玩家分数显示
UFUNCTION(BlueprintCallable, Category = "UI")
void UpdatePlayerScore(int32 NewScore);
};
// MyHUDWidget.cpp
#include "MyHUDWidget.h"
UMyHUDWidget::UMyHUDWidget()
{
// 设置默认的玩家分数显示
PlayerScore = 0;
}
void UMyHUDWidget::UpdatePlayerScore(int32 NewScore)
{
// 更新玩家分数
PlayerScore = NewScore;
// 刷新界面显示
UpdateUI();
}
void UMyHUDWidget::UpdateUI()
{
// 更新用户界面的显示
// ...
}
7. UGameplayStatics - GameplayStatics类
UGameplayStatics
是一个静态类,提供了在游戏中执行各种通用操作的方法。
案例7:使用GameplayStatics生成粒子效果
// MyParticleFunctionLibrary.h
#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "Particles/ParticleSystem.h"
#include "Kismet/GameplayStatics.h"
#include "MyParticleFunctionLibrary.generated.h"
UCLASS()
class MYPROJECT_API UMyParticleFunctionLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
// 在指定位置生成粒子效果
UFUNCTION(BlueprintCallable, Category = "Particles")
static void SpawnParticleEffect(UObject* WorldContextObject, UParticleSystem* ParticleSystem, FVector Location);
};
// MyParticleFunctionLibrary.cpp
#include "MyParticleFunctionLibrary.h"
void UMyParticleFunctionLibrary::SpawnParticleEffect(UObject* WorldContextObject, UParticleSystem* ParticleSystem, FVector Location)
{
// 使用GameplayStatics在指定位置生成粒子效果
UGameplayStatics::SpawnEmitterAtLocation(WorldContextObject, ParticleSystem, Location);
}
8. UInputComponent - 输入组件类
UInputComponent
是虚幻引擎中用于处理输入的组件,可以附加到AActor
或者APawn
上,用于响应玩家输入。
案例8:处理玩家输入
// MyPlayerCharacter.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "GameFramework/PlayerController.h"
#include "MyPlayerCharacter.generated.h"
UCLASS()
class MYPROJECT_API AMyPlayerCharacter : public ACharacter
{
GENERATED_BODY()
public:
// 构造函数
AMyPlayerCharacter();
// 设置玩家输入组件
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
// 处理前后移动
void MoveForward(float Value);
// 处理左右移动
void MoveRight(float Value);
};
// MyPlayerCharacter.cpp
#include "MyPlayerCharacter.h"
AMyPlayerCharacter::AMyPlayerCharacter()
{
// 设置这个角色能够接收玩家输入
AutoPossessPlayer = EAutoReceiveInput::Player0;
}
void AMyPlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
// 绑定前后移动
PlayerInputComponent->BindAxis("MoveForward", this, &AMyPlayerCharacter::MoveForward);
// 绑定左右移动
PlayerInputComponent->BindAxis("MoveRight", this, &AMyPlayerCharacter::MoveRight);
}
void AMyPlayerCharacter::MoveForward(float Value)
{
// 处理前后移动逻辑
// ...
}
void AMyPlayerCharacter::MoveRight(float Value)
{
// 处理左右移动逻辑
// ...
}
9. AGameSession - GameSession类
AGameSession
是虚幻引擎中处理游戏会话的类,可以用于管理玩家连接、处理会话状态等。
案例9:自定义游戏会话
// MyGameSession.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/GameSession.h"
#include "MyGameSession.generated.h"
UCLASS()
class MYPROJECT_API AMyGameSession : public AGameSession
{
GENERATED_BODY()
public:
// 构造函数
AMyGameSession();
};
// MyGameSession.cpp
#include "MyGameSession.h"
AMyGameSession::AMyGameSession()
{
// 设置自定义的游戏会话逻辑
// ...
}
三、总结
这些类在处理输入和管理游戏会话方面发挥着关键作用,为游戏开发提供了强大的支持。希望这篇技术博客能够对开发者在虚幻引擎中的工作有所帮助。