1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UE4 でアクターにスタティックメッシュとマテリアルを適用する

Posted at

環境

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 );
}

まとめ

スタティックメッシュを初期化し、そこにマテリアルを設定する。
アクターにコンポーネントの初期化方法を知っていれば、すぐに対応できる

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?