LoginSignup
1
2

More than 5 years have passed since last update.

UE4 でアクターにライトを追加する

Posted at

環境

UE 4.10.0
Visual Studio 2015

概要

Unreal Engine 4 を触ってみて動作を確認する
アクターにディレクショナルライトを追加してみる
参考 : UE4 でアクターにスタティックメッシュとマテリアルを適用する
http://qiita.com/maprog/items/4fa40ae23e987428d823

本文

プログラムからライトを追加してみる

基本的に、スタティックメッシュコンポーネントと同じで、ライトコンポーネントのインスタンスを
作成します。今回は、ディレクショナルライトなので UDirectionalLightComponent のインスタ
ンスを生成して初期化パラメータを設定します。

アクターのコードを書く

今回は、以下の 4 つのインスタンスをアクターに追加します。

  • UStaticMeshComponent
  • UStaticMesh
  • UMaterial
  • UDirectionalLightComponent

※ コンテンツブラウザにマテリアルを作成しておきます
  マテリアル名は "Material1" です

[ヘッダー]
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;
UDirectionalLightComponent* mLightDirectional;

};

[コード]
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);
    }
}

mLightDirectional = ObjectInitializer.CreateDefaultSubobject<UDirectionalLightComponent>(this, TEXT("LightName"));
if (mLightDirectional)
{
    FRotator rot(-90.0f, 0.0f, 0.0f);
    mLightDirectional->SetRelativeRotation(rot);
}

}

ライトの設定項目

今回は、ディレクショナルライトのインスタンスを生成し、回転を設定しました。
それによって、ディレクショナルライトの当たる方向を制御しています。
今回は、メッシュの上から光が当たるように調整しました。
ディレクショナルライトは座標は関係なく、向きだけなので回転を制御すれば良いですね。
動的にライトの方向を動かすには SetRelativeRotation で、ライトの方向を Tick 関数
等で制御すれば良さそうですね。

1
2
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
2