目录
众所周知蓝图中将模型导入到静态网格体,只需要拖进去即可。
但是在c++中应该怎么从content里面找到我们想要的模型,并将这个模型放进静态网格体呢?
首先我们创建了一个简单的actor的头文件和cpp文件。
不会创建看这个:
(1条消息) ue4/5蓝图与c++混用基础入门的基础操作(适合有蓝图基础和c++基础的新手,创建自己的蓝图)_ue4蓝图和c++混合开发_多方通行8的博客-优快云博客
操作步骤
如图:
然后我们要创建一个静态网格体组件,并且将其放在根组件的下面,记得加在头文件处添加头文件:
然后我们就可以在资源文件夹content下面查找需要的文件了:
可以看到后面的这一段是这个模型所在的地址:
值得注意的是,我们的地址不能填写错误,一般填写错误的话,会导致编译器崩溃,这是一个很严重的问题。
还有一个值得注意的点是路径是/Game为开头的,而不是以你的项目文件为开头,不论你的项目文件叫什么名字,都要以/Game为开头,否则会报错。
然后就添加完成了:
蓝图中我们就不需要设置最为原始的静态网格体:
代码:
头文件:
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Components/StaticMeshComponent.h"
#include "MyActor.generated.h"
UCLASS()
class UEDSTUDY_API AMyActor : public AActor
{
GENERATED_BODY()
public:
// 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;
public:
UPROPERTY(VisibleAnywhere)
UStaticMeshComponent* myMesh;
};
cpp文件:
// Fill out your copyright notice in the Description page of Project Settings.
#include "MyActor.h"
// Sets default values
AMyActor::AMyActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
//创建这个组件,并且放在根组件下面
myMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("mesh"));
myMesh->SetupAttachment(RootComponent);
//查找content里面的模型
static ConstructorHelpers::FObjectFinder<UStaticMesh> CubeAssist(TEXT("/Game/Mesh/Cube.Cube"));
//判断是否找到,是的话,将模型设置上去,然后设置相对位置是0,0,0
if (CubeAssist.Succeeded())
{
myMesh->SetStaticMesh(CubeAssist.Object);
myMesh->SetRelativeLocation(FVector(0, 0, 0));
}
}
// Called when the game starts or when spawned
void AMyActor::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void AMyActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}