UE5 - 制作《塞尔达传说》中林克的技能 - 16 - 遥控炸弹(一)

发布于:2025-06-30 ⋅ 阅读:(17) ⋅ 点赞:(0)

让我们继续《塞尔达传说》中林克技能的制作!!!
本章节的核心目标:素材导入与遥控炸弹的外观

先让我们看一下完成后的效果:

在这里插入图片描述

基本流程:素材准备->C++类开发->蓝图配置->场景部署


1.素材准备:视觉元素搭建

1.1 粒子素材

在这里插入图片描述

1.2 材质与实例

  • 基础材质M_Bomb: 在材质编辑器中,通过颜色常量节点+自发光参数节点构建发光逻辑(如下图的材质图表),实现了红色基底与自发光结合的效果。

  • 材质实例: 基于M_Bomb创建MI_BombBox、MIBombSphere(如下图材质实例目录),为不同形态的炸弹差异化视觉效果做准备。

  • 调整MI_BombSphere: 调整为紫色,做出差异化即可。
    在这里插入图片描述


2.C++类开发:定义核心逻辑

作用: 通过C++定义基础组件与生成逻辑,为蓝图可视化配置提供骨架

2.1 头文件(BombBase.h)

定义炸弹基础组件,通过UPROPERTY暴露给蓝图配置:

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "BombBase.generated.h"


class UStaticMeshComponent;
class UParticleSystem;

UCLASS()
class ZELDARSKILLS_API ABombBase : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	ABombBase();

	// 静态网格组件,控制炸弹外观
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Components")
	TObjectPtr<UStaticMeshComponent> SM;

	// 炸弹生成粒子特效
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Components")
	TObjectPtr<UParticleSystem> BombSpawnVFX;

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

};

2.2 源文件(BombBase.cpp)

实现组件初始化与生成逻辑

// Fill out your copyright notice in the Description page of Project Settings.


#include "Actors/BombBase.h"
#include "Components/StaticMeshComponent.h"
#include "Particles/ParticleSystemComponent.h"
#include "Kismet/GameplayStatics.h"
// Sets default values
ABombBase::ABombBase()
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = false;

	// 创建并设置静态网格为根组件
	SM = CreateDefaultSubobject<UStaticMeshComponent>("Bomb Mesh");
	SM->SetupAttachment(RootComponent);

}

// Called when the game starts or when spawned
void ABombBase::BeginPlay()
{
	Super::BeginPlay();
	// 生成时在当前位置播放 BombSpawnVFX特效
	UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), BombSpawnVFX, GetActorLocation());
	
}

// Called every frame
void ABombBase::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

}



3.蓝图配置:多形态定制

3.1 蓝图创建

基于BombBase类,在内容浏览器创建BPA_BombBase蓝图。然后基于BombBase类创建子蓝图类分别为BPA_BombBoxBPA_BombSphere
在这里插入图片描述

3.2 蓝图属性配置

  • 立方体炸弹(BPA_BombBox):
    打开蓝图,选中SM组件,在细节面板配置:

    • 静态网格:Shape_Cube(选一个立方体的网格即可)
    • 材质:**MI_BombBox(选择1中创建的材质实例)**如下图所示
      在这里插入图片描述
  • 球形炸弹(BPA_BombBaseSphere):
    同理,进行配置:

    • 静态网格:Shape_Sphere(选一个球体)
    • 材质:MI_BombSphere(选择1中创建的材质实例)
      在这里插入图片描述

4. 场景投放效果

将BPA_BombBaseBPA_BombBaseSphere拖入场景中
在这里插入图片描述

第16部分完成啦!!
十分感谢大家的阅读、点赞、收藏!!
如果有不足之处,有错误地方,欢迎大家在评论区讨论、批评、指正!!!