【虚幻UE5-C++】 ––– UE5-C++中常见的父类

在虚幻引擎中,存在众多常见的父类,它们为游戏开发者提供了丰富的功能和强大的扩展性。本篇技术博客将重点介绍几个常见的父类,并通过案例演示它们的用法。

一、概述

虚幻引擎中有许多常用的父类,它们提供了各种功能,用于创建游戏对象、处理输入、管理游戏状态等。以下是一些常用的虚幻引擎父类:

  1. AActor(Actor类):表示在虚拟场景中的一个对象。所有在游戏中出现的物体都是Actor的子类,包括玩家角色、道具、敌人等。

  2. UObject:是所有虚幻对象的基类。几乎所有的虚幻引擎类都是UObject或其子类。

  3. UActorComponent:表示可以被附加到Actor上的组件,用于添加额外的功能或属性。例如,MeshComponent用于处理渲染,AudioComponent用于处理声音等。

  4. UGameInstance:在整个游戏实例中保持持久性数据和状态的类,通常用于保存全局性的信息。

  5. UUserWidget:用于创建用户界面的基类,通过蓝图和代码可以创建各种界面元素。

  6. UInputComponent:用于处理输入的组件,可以附加到Actor或Pawn上,用于响应玩家的键盘、鼠标或手柄输入。

  7. UGameplayStatics:提供了在游戏中执行各种通用操作的静态类,包括生成粒子效果、播放声音等。

  8. AGameSession:处理游戏会话的类,用于管理玩家连接、处理会话状态等。

  9. APlayerController:控制玩家输入和视图,处理与玩家直接互动的逻辑。

  10. 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()
{
    // 设置自定义的游戏会话逻辑
    // ...
}

三、总结

这些类在处理输入和管理游戏会话方面发挥着关键作用,为游戏开发提供了强大的支持。希望这篇技术博客能够对开发者在虚幻引擎中的工作有所帮助。

  • 29
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值