我用代码动态创建了一个StaticMesh, 可以成功的编译和运行,但是我尝试打包的时候提示错误。
代码如下:
// Fill out your copyright notice in the Description page of Project Settings.
#include "pjStaticMesh.h"
#include "MyActor.h"
#include "RawMesh.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;
UStaticMeshComponent* c1 = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMeshComponent1"));
UStaticMesh* m1 = NewObject<UStaticMesh>();
new (m1->SourceModels) FStaticMeshSourceModel();
FStaticMeshSourceModel& SrcModel = m1->SourceModels[0];
m1->LightingGuid = FGuid::NewGuid();
m1->LightMapResolution = 64;
m1->LightMapCoordinateIndex = 1;
FRawMesh NewRawMesh;
SrcModel.RawMeshBulkData->LoadRawMesh(NewRawMesh);
NewRawMesh.FaceMaterialIndices.Add(0);
NewRawMesh.FaceMaterialIndices.Add(1);
NewRawMesh.FaceSmoothingMasks.AddZeroed(2);
NewRawMesh.VertexPositions.Add(FVector(0, 0, 0));
NewRawMesh.VertexPositions.Add(FVector(1000, 1000, 0));
NewRawMesh.VertexPositions.Add(FVector(1000, 0, 0));
NewRawMesh.VertexPositions.Add(FVector(0, 1000, 0));
NewRawMesh.VertexPositions.Add(FVector(1000, 1000, 0));
NewRawMesh.VertexPositions.Add(FVector(0, 0, 0));
//NewRawMesh.WedgeColors.Add(FColor::White);
//NewRawMesh.WedgeColors.Add(FColor::Green);
//NewRawMesh.WedgeColors.Add(FColor::Red);
//NewRawMesh.WedgeColors.Add(FColor::Blue);
//NewRawMesh.WedgeColors.Add(FColor::Green);
//NewRawMesh.WedgeColors.Add(FColor::White);
NewRawMesh.WedgeIndices.Add(0);
NewRawMesh.WedgeIndices.Add(1);
NewRawMesh.WedgeIndices.Add(2);
NewRawMesh.WedgeIndices.Add(3);
NewRawMesh.WedgeIndices.Add(4);
NewRawMesh.WedgeIndices.Add(5);
NewRawMesh.WedgeTexCoords[0].Add(FVector2D(0, 0));
NewRawMesh.WedgeTexCoords[0].Add(FVector2D(10, 10));
NewRawMesh.WedgeTexCoords[0].Add(FVector2D(10, 0));
NewRawMesh.WedgeTexCoords[0].Add(FVector2D(0, 10));
NewRawMesh.WedgeTexCoords[0].Add(FVector2D(10, 10));
NewRawMesh.WedgeTexCoords[0].Add(FVector2D(0, 0));
//NewRawMesh.WedgeTangentX.AddZeroed(6);
//NewRawMesh.WedgeTangentY.AddZeroed(6);
//NewRawMesh.WedgeTangentZ.AddZeroed(6);
//NewRawMesh.WedgeTangentZ.Add(FVector(0, 0, 1));
//NewRawMesh.WedgeTangentZ.Add(FVector(0, 0, 1));
//NewRawMesh.WedgeTangentZ.Add(FVector(0, 0, 1));
//NewRawMesh.WedgeTangentZ.Add(FVector(0, 0, 1));
//NewRawMesh.WedgeTangentZ.Add(FVector(0, 0, 1));
//NewRawMesh.WedgeTangentZ.Add(FVector(0, 0, 1));
SrcModel.RawMeshBulkData->SaveRawMesh(NewRawMesh);
static ConstructorHelpers::FObjectFinder<UMaterial> mat1(TEXT("/Game/StarterContent/Materials/M_Brick_Clay_New.M_Brick_Clay_New"));
if (mat1.Succeeded())
{
m1->Materials.Add(mat1.Object);
}
static ConstructorHelpers::FObjectFinder<UMaterial> mat2(TEXT("/Game/StarterContent/Materials/M_CobbleStone_Rough.M_CobbleStone_Rough"));
if (mat2.Succeeded())
{
m1->Materials.Add(mat2.Object);
}
TArray<FText> BuildErrors;
m1->Build(false, &BuildErrors);
c1->SetStaticMesh(m1);
c1->SetRelativeLocation(FVector(0.0f, 0.0f, -40.0f));
c1->SetWorldScale3D(FVector(1.f));
}
// Called when the game starts or when spawned
void AMyActor::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void AMyActor::Tick( float DeltaTime )
{
Super::Tick( DeltaTime );
}
运行效果如下:
错误提示如下:
请问有人遇到过类似的问题吗?要怎么解决?