環境
UE 4.10.0
Visual Studio 2015
概要
Unreal Engine 4 を触ってみて動作を確認する
C++ プログラム上でスタティックメッシュを初期化し、そこにマテリアルを適用
する手順のまとめ
参考:UE4 でアクターにプログラムからコンポーネントを追加する方法
http://qiita.com/maprog/items/eba3e9837979769487ac
本文
マテリアルを準備
まずは、必要となるマテリアルをコンテンツブラウザ上で作成する。
今回は、コンテンツブラウザ直下に Material1 という名前でマテリアルを作成する
コンテンツブラウザ上で [右クリック] > [マテリアル] で作成できる
アクターのコードを書く
以下の 3 つのインスタンスをアクターに追加し、アセットのパスを指定して初期化
して終了。以下にサンプルを用意した。
- UStaticMeshComponent
- UStaticMesh
- UMaterial
[ヘッダ]
class TEST20160104_API AActorMaterial : public AActor
{
GENERATED_BODY()
public:
AActorMaterial(const FObjectInitializer& ObjectInitializer);
virtual void BeginPlay() override;
virtual void Tick( float DeltaSeconds ) override;
UStaticMeshComponent* mStaticMeshComponent;
UStaticMesh* mStaticMesh;
UMaterial* mMaterial;
};
[コード]
AActorMaterial::AActorMaterial(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
, mStaticMeshComponent(nullptr)
, mStaticMesh(nullptr)
, mMaterial(nullptr)
{
PrimaryActorTick.bCanEverTick = true;
static ConstructorHelpers::FObjectFinder<UMaterial> materialAsset(TEXT("/Game/Material1.Material1"));
if (materialAsset.Succeeded())
{
mMaterial = materialAsset.Object;
}
static ConstructorHelpers::FObjectFinder<UStaticMesh> staticMeshAsset(TEXT("/Game/StarterContent/Shapes/Shape_Sphere.Shape_Sphere"));
if (staticMeshAsset.Succeeded())
{
mStaticMesh = staticMeshAsset.Object;
mStaticMesh->Materials[0] = mMaterial;
mStaticMeshComponent = ObjectInitializer.CreateDefaultSubobject<UStaticMeshComponent>(this, TEXT("StaticMeshName"));
if (mStaticMeshComponent)
{
RootComponent = mStaticMeshComponent;
mStaticMeshComponent->SetStaticMesh(mStaticMesh);
}
}
}
void AActorMaterial::BeginPlay()
{
Super::BeginPlay();
}
void AActorMaterial::Tick( float DeltaTime )
{
Super::Tick( DeltaTime );
}
まとめ
スタティックメッシュを初期化し、そこにマテリアルを設定する。
アクターにコンポーネントの初期化方法を知っていれば、すぐに対応できる