UE 4 C++ラーニングレコード-コード交換マテリアル(4.22.3バージョン)
10195 ワード
1、定義
2、賦課
UPROPERTY(Category = Block, VisibleDefaultsOnly, BlueprintReadOnly, meta = (AllowPrivateAccess = "true"))
class UStaticMeshComponent* BlockMesh;
/** Pointer to white material used on the focused block */
UPROPERTY()
class UMaterial* BaseMaterial;
/** Pointer to blue material used on inactive blocks */
UPROPERTY()
class UMaterialInstance* BlueMaterial;
/** Pointer to orange material used on active blocks */
UPROPERTY()
class UMaterialInstance* OrangeMaterial;
2、賦課
// Structure to hold one-time initialization
struct FConstructorStatics
{
ConstructorHelpers::FObjectFinderOptional<UStaticMesh> PlaneMesh;
ConstructorHelpers::FObjectFinderOptional<UMaterial> BaseMaterial;
ConstructorHelpers::FObjectFinderOptional<UMaterialInstance> BlueMaterial;
ConstructorHelpers::FObjectFinderOptional<UMaterialInstance> OrangeMaterial;
FConstructorStatics()
: PlaneMesh(TEXT("/Game/Puzzle/Meshes/PuzzleCube.PuzzleCube"))
, BaseMaterial(TEXT("/Game/Puzzle/Meshes/BaseMaterial.BaseMaterial"))
, BlueMaterial(TEXT("/Game/Puzzle/Meshes/BlueMaterial.BlueMaterial"))
, OrangeMaterial(TEXT("/Game/Puzzle/Meshes/OrangeMaterial.OrangeMaterial"))
{
}
};
static FConstructorStatics ConstructorStatics;
// Create static mesh component
BlockMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("BlockMesh0"));
BlockMesh->SetStaticMesh(ConstructorStatics.PlaneMesh.Get());
BlockMesh->SetRelativeScale3D(FVector(1.f,1.f,0.25f));
BlockMesh->SetRelativeLocation(FVector(0.f,0.f,25.f));
BlockMesh->SetMaterial(0, ConstructorStatics.BlueMaterial.Get());
BlockMesh->SetupAttachment(DummyRoot);
BlockMesh->OnClicked.AddDynamic(this, &APuzzleBlock::BlockClicked);
BlockMesh->OnInputTouchBegin.AddDynamic(this, &APuzzleBlock::OnFingerPressedBlock);
// Save a pointer to the orange material
BaseMaterial = ConstructorStatics.BaseMaterial.Get();
BlueMaterial = ConstructorStatics.BlueMaterial.Get();
OrangeMaterial = ConstructorStatics.OrangeMaterial.Get();
**BlockMesh->SetMaterial(0, BaseMaterial);**