【SiKi学院Unreal视频教程】Unreal入门第一季 C++编程学习

49 阅读3分钟

Unreal 入门第一季 C++ 实战:手把手写一个可交互的 3D 物体

一、开发环境准备(1天)

【SiKi学院Unreal视频教程】Unreal入门第一季 C++编程学习---789it.top/13813/

1. 引擎安装与配置

  • Epic Games Launcher 安装
  • 下载最新版 Unreal Engine(建议 5.0+)
  • 创建第一个 C++ 项目(选择 "Blank" 模板)
  • 配置 Visual Studio 开发环境(需安装 C++ 游戏开发组件)

2. 项目结构初识

YourProject/
├── Content/          # 资源文件
├── Source/           # C++ 源代码
│   └── YourProject/  # 项目核心代码
└── YourProject.uproject  # 项目入口文件

二、创建第一个可交互物体(3天)

1. 创建自定义 C++ 类

// 在 YourProject.Build.cs 中添加模块依赖
PublicDependencyModuleNames.AddRange(new string[] { 
    "Core", 
    "CoreUObject", 
    "Engine", 
    "InputCore" 
});

// 创建继承自 AActor 的类
UCLASS()
class YOURPROJECT_API AInteractiveCube : public AActor
{
    GENERATED_BODY()
};

2. 添加3D模型组件

// 在类声明中添加
UPROPERTY(VisibleAnywhere)
UStaticMeshComponent* MeshComponent;

// 在构造函数中初始化
AInteractiveCube::AInteractiveCube()
{
    PrimaryActorTick.bCanEverTick = true;
    
    MeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Mesh"));
    RootComponent = MeshComponent;
    
    // 加载默认立方体模型
    static ConstructorHelpers::FObjectFinder<UStaticMesh> CubeMesh(
        TEXT("StaticMesh'/Engine/BasicShapes/Cube.Cube'"));
    if (CubeMesh.Succeeded())
    {
        MeshComponent->SetStaticMesh(CubeMesh.Object);
    }
}

三、实现交互功能(3天)

1. 设置物体物理属性

// 在构造函数中添加
MeshComponent->SetSimulatePhysics(true);
MeshComponent->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);

2. 添加点击交互

// 在类声明中添加
UFUNCTION()
void OnClicked(UPrimitiveComponent* ClickedComp, FKey ButtonPressed);

// 在 BeginPlay 中绑定事件
void AInteractiveCube::BeginPlay()
{
    Super::BeginPlay();
    MeshComponent->OnClicked.AddDynamic(this, &AInteractiveCube::OnClicked);
}

// 实现点击事件
void AInteractiveCube::OnClicked(UPrimitiveComponent* ClickedComp, FKey ButtonPressed)
{
    UE_LOG(LogTemp, Warning, TEXT("Cube clicked!"));
    
    // 点击后改变颜色
    MeshComponent->SetMaterial(0, UMaterialInstanceDynamic::Create(
        MeshComponent->GetMaterial(0), this));
    MeshComponent->CreateAndSetMaterialInstanceDynamic(0)->SetVectorParameterValue(
        "BaseColor", FLinearColor::MakeRandomColor());
}

四、进阶功能扩展(3天)

1. 添加悬停效果

// 类声明中添加
UFUNCTION()
void OnBeginHover(UPrimitiveComponent* HoveredComponent);
UFUNCTION()
void OnEndHover(UPrimitiveComponent* HoveredComponent);

// BeginPlay 中添加绑定
MeshComponent->OnBeginCursorOver.AddDynamic(this, &AInteractiveCube::OnBeginHover);
MeshComponent->OnEndCursorOver.AddDynamic(this, &AInteractiveCube::OnEndHover);

// 实现悬停效果
void AInteractiveCube::OnBeginHover(UPrimitiveComponent* HoveredComponent)
{
    MeshComponent->SetRenderCustomDepth(true);
    MeshComponent->SetCustomDepthStencilValue(252);
}

void AInteractiveCube::OnEndHover(UPrimitiveComponent* HoveredComponent)
{
    MeshComponent->SetRenderCustomDepth(false);
}

2. 添加参数化配置

// 类声明中添加可编辑属性
UPROPERTY(EditAnywhere, Category="Interaction")
float ImpulseStrength = 1000.0f;

// 修改点击事件
void AInteractiveCube::OnClicked(UPrimitiveComponent* ClickedComp, FKey ButtonPressed)
{
    // 添加冲击效果
    FVector Impulse = FMath::VRand() * ImpulseStrength;
    MeshComponent->AddImpulse(Impulse);
}

五、项目打包与优化(2天)

1. 添加简单的UI反馈

// 创建Widget Blueprint显示交互信息
// 在C++中调用
APlayerController* PC = GetWorld()->GetFirstPlayerController();
if (UUserWidget* Widget = CreateWidget<UUserWidget>(PC, WidgetClass))
{
    Widget->AddToViewport();
}

2. 打包设置

  • 配置项目设置 → 打包 → 添加默认地图
  • 设置应用程序图标
  • 构建为Development或Shipping版本

学习要点总结

  1. C++类创建:理解UCLASS宏和UE的反射系统
  2. 组件架构:掌握通过组件构建游戏对象的方式
  3. 交互系统:熟悉UE的事件绑定机制
  4. 物理模拟:了解基本的物理属性设置
  5. 调试技巧:使用UE_LOG和屏幕调试信息

下一步学习建议

  • 尝试为物体添加音效反馈
  • 实现更复杂的物理交互行为
  • 学习使用数据资产配置物体属性
  • 探索蓝图与C++的混合编程

通过本课程10天的实践,您将掌握Unreal C++开发的基础流程,能够创建具有物理特性和交互功能的3D物体,为后续更复杂的游戏开发打下坚实基础。