環境
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 関数
等で制御すれば良さそうですね。