第一个示例目的是创建UE工程,创建一个Actor和Pawn。Actor能移动,能使用物理。Pawn能设置替换游戏的默认控制器,控制相机移动和旋转。入门示例成品。
创建工程
工程目录:
-
Binaries:游戏编译的二进制文件(dll等)
-
Config:游戏的项目设置、世界场景设置等设置项,也就是这个按钮下的设置内容。
-
Content:游戏资源目录,蓝图、模型、材质等。Content/Collections和Content/Developers是临时文件。
-
DerivedDataCache:
-
Intermediate:生成的中间文件。
-
Saved:自动保存的文件,日志、自动备份文件等。
-
*.sln:C++工程文件。
-
*.uproject:Engine工程文件。
创建Actor
右键创建Actor类。
选择父类:Actor。
命名为MyActor。代码如下。
UCLASS()
class TEST1_API AMyActor : public AActor
{
GENERATED_BODY()
public:
UPROPERTY(VisibleAnywhere, Category = "My Actor Components")
UStaticMeshComponent* MyStaticMesh;
// Sets default values for this actor's properties
AMyActor();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
};
UE类都要加上UCLASS()的标签,以及GENERATED_BODY()这个定义块。这个类里自定义了一个UStaticMeshComponent类型的组件,它是一个静态网格模型。
创建静态网格模型组件代码如下:
AMyActor::AMyActor()
{
PrimaryActorTick.bCanEverTick = true;
// 创建UStaticMeshComponent,TEXT("MyStaticMesh")这个字符串没实际用处,只有在报错调试时候可以看到。
MyStaticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MyStaticMesh"));
}
创建好C++类,点击编译,在“内容浏览器”中显示如下。
创建MyActor的蓝图类,在蓝图类里就可以编辑这个类实例出来的物体了。
蓝图类我们统一放到新建的目录Content/Blueprints文件夹下,如下图所示。
双击蓝图类进行编辑,赋一个Sphere给刚才创建的UStaticMeshComponent。
将蓝图类拖入场景中,实例化一个对象出来。
如果要让球运动,可以在Tick函数里加如下代码。
void AMyActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
// 沿着X轴移动。
AddActorLocalOffset(FVector(200.0f, 0.0f, 0.0f) * DeltaTime);
}
创建Pawn
Pawn是傀儡的意思,也就是玩家可以操控的对象。其与Actor大体相同,只是多了一个默认函数用来处理玩家输入,代码如下。
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
创建的过程同创建Actor,只是继承的C++父类改成Pawn,类名命名为AMyPawn,并创建UCameraComponent组件。具体代码看“入门示例成品”。
设置“输入”。点击“设置 > 项目设置……”
点击“输入”选项。
添加轴输入(“操作映射”指的是一次性的响应事件,比如点击某个按钮;“轴映射”指的是连续性的响应事件,比如按下某个键的过程中的事件处理)。这里我们设置了按下W、A、S、D和鼠标左右滑动、上下滑动的映射。
在AMyPawn类里加上响应函数。
void MoveForwardBack(float Value);
void MoveLeftRight(float Value);
void MouseX(float Value);
void MouseY(float Value);
在SetupPlayerInputComponent里绑定“轴映射”的响应函数。
void AMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis(TEXT("MoveFrontBack"), this, &AMyPawn::MoveForwardBack);
PlayerInputComponent->BindAxis(TEXT("MoveLeftRight"), this, &AMyPawn::MoveLeftRight);
PlayerInputComponent->BindAxis(TEXT("MouseX"), this, &AMyPawn::MouseX);
PlayerInputComponent->BindAxis(TEXT("MouseY"), this, &AMyPawn::MouseY);
}
创建蓝图类BP_MyPawn,并将其拖入到场景中。
发现问题:将Pawn蓝图类拖入场景,点击运行并不能操作我们的UCameraComponent。
设置默认Pawn
右键点击默认的游戏模式,创建蓝图类BP_MyTest1GameMode,如下图。
双击创建出来的蓝图类,并编辑“默认pawn类”为刚才创建的AMyPawn类对应的蓝图类。
选择默认的游戏模式为刚才创建的BP_MyTest1GameMode。