このドキュメントでは、接触時にカラーが変化し、ゆっくりと消えていく Light アクタの設定方法について説明します。
この設定は、オーバーラップ トリガーとして機能する Box コンポーネントと Point Light アクタを操作する Timeline コンポーネントを含む Point Light コンポーネント を使用して行います。

Fading Light アクタを作成する
-
ブループリント テンプレートで C++ プロジェクトを新規作成して「FadingLights」と名前を付けます。
クリックしてフルサイズで表示
-
コンテンツ ブラウザ へ移動して、 [Add (+) (追加)] ボタンをクリックして新しいブループリント アクタ を作成し、「BP_LightActor」と名前を付けます。
-
コンテンツ ブラウザ で BP_LightActor を ダブルクリック して ブループリント エディタ で開き、[Class Defaults (クラスのデフォルト)] を開きます。
クリックしてフルサイズで表示
-
[Component (コンポーネント)] タブで [Add (+) (追加)] ボタンをクリックし、ドロップダウン メニューの [Box Collision (ボックス コリジョン)] を選択し、名前を 「OverlapCollision」 に変更します。
-
[Components (コンポーネント)] タブで OverlapCollision を選択して DefaultSceneRoot にドラッグし、OverlapCollision を新規ルート コンポーネントにします。
-
[Components (コンポーネント)] タブで、[Add(+) (追加)] をクリックして、Point Light を検索し選択します。
-
イベント グラフ を開いてグラフを右クリックし、ブループリントのコンテキスト メニュー から [Add Timeline (タイムラインを追加する)] を選択します。タイムラインの名前を 「PointLightTimeline」 にします。
-
[My Blueprint (マイ ブループリント)] タブに移動し、[Variables (変数)] カテゴリの [(+)] ボタンをクリックして新しい Float 型の変数を追加します。変数の名前を「BrightnessMultiplier」に変更してブループリントをコンパイルします。[Detail (詳細)] パネルで デフォルト値 を「**」に設定します。
-
[Compile (コンパイル)] と [Save (保存)] ボタンを順にクリックします。
Brightness トラックを設定する
プレイヤーが Light アクタの Box コンポーネントの境界に重なる場合、Timeline コンポーネントでは Point Light コンポーネントの輝度の値を操作するための Float カーブが必要になります。
明るさの初期値は「5000」で、5 秒間で「0」まで減少します。
-
PointLightTimeline ノード をダブルクリックして タイムライン エディタ を開き、 [Track] > [Add Float Track] を追加します。
クリックしてフルサイズで表示
-
Float カーブ トラックに「LightBrightnessFloatTrack」という名前を付け、[Shift] ボタンを押しながらクリックして 2 つのキーをトラックに追加します。1 つ目のキーをクリックして時間値を (0, 5000) に、2 つ目のキーをクリックし時間値を (5, 0) に設定してください。
クリックしてフルサイズで表示
-
出来上がった LightBrightnessFloat トラックが次のように表示されます。
クリックしてフルサイズで表示
Color トラックを設定する
プレイヤーが Light アクタの Box コンポーネントの境界に重なる場合、PointLight タイムラインでは Point Light コンポーネントのカラー プロパティを操作するための線形カラー カーブ トラックが必要になります。
-
タイムライン エディタ からカラー カーブ トラックを追加します。
クリックしてフルサイズで表示
-
新しいカラー トラックに 「LightLinearColorTrack」 という名前を付けます。
クリックしてフルサイズで表示
-
最初のカラー キーをダブルクリックして時間を 0 に、RGB の値を (R :1、G: 0.665、B :0.015) に変更します。
クリックしてフルサイズで表示
-
2 つ目のカラー キーをダブルクリックして時間を 5 に、RGB の値を以下のように変更します(R:0, G:0, B:0)。
クリックしてフルサイズで表示
-
[Compile (コンパイル)] と [Save (保存)] ボタンを順にクリックします。
-
出来上がったカラー トラックが次のように表示されます。
クリックしてフルサイズで表示
作成中のブループリント
クリックしてフルサイズで表示
コリジョン オーバーラップ イベントと更新ロジックを作成する
Box コンポーネントには、アクタがコリジョンの境界を入力する時に TimelineComponent をトリガーする機能が必要です。
また、PointLightTimeline ではその明るさとカラーを変更するための更新ロジックが必要です。
-
ブループリント エディタ にある [Components (コンポーネント)] タブに移動して OverlapCollision コンポーネントを選択します。[Details (詳細)] パネルで [Events (イベント)] カテゴリまでスクロールして、On Component Begin Overlap イベントの隣にある [+] アイコンをクリックします。
-
On Component Begin Overlap(OverlapCollision) ノードの 実行 ピンをドラッグして PointTimelineComponent ノードの Play ピンに接続します。
Begin Object Class=/Script/BlueprintGraph.K2Node_Timeline Name="K2Node_Timeline_0" TimelineName="PointLightTimeline" TimelineGuid=9B6871DF41CC70785FBD70A935625EAC NodePosX=448 NodePosY=80 bCanRenameNode=True ErrorType=1 NodeGuid=CD70BA9E43E1F7EB1FF420816FF55084 CustomProperties Pin (PinId=E50CDF574B8B5BE1ECFB4AB4CE506DCD,PinName="Play",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_ComponentBoundEvent_0 3608BECC49E96377DB2960B5B1108C19,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=7B459F68414F7C0977CD2191A446853E,PinName="PlayFromStart",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=3B492C5145FAF24CAB2B7AAEEA07A923,PinName="Stop",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=BE2C31AB4E0D68E68EA684B10CB8BED5,PinName="Reverse",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=BD1E6E7E48EE7A9DBF6E6D82849920FF,PinName="ReverseFromEnd",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=B34A88804DC700EB96C1A08A8BC63B0E,PinName="Update",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_2 9C312EB049C5A1020D6797A147DEABB8,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=8D513CA546C97BEAC7B6A4AF44A12299,PinName="Finished",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=E6EE52734B58BA4623436EA5FE8BB8BC,PinName="SetNewTime",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=87A9CA2245DA3C1405FEE58EC3344746,PinName="NewTime",PinType.PinCategory="real",PinType.PinSubCategory="float",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=CA29340A4DA024A1403EF6BDDAF84042,PinName="Direction",Direction="EGPD_Output",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=Enum'"/Script/Engine.ETimelineDirection"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=5D3D277B4502D9621FEE289C0C2C69A1,PinName=" LightBrightnessFloatTrack",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="float",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_PromotableOperator_0 82EF0A4B4E496697FA249BB6F7507FDF,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=E21609824D5C866D9DB781A807FE09D0,PinName="LightLinearColorTrack",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_6 D90419F74048C11128F75A94675B08E1,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/BlueprintGraph.K2Node_ComponentBoundEvent Name="K2Node_ComponentBoundEvent_0" DelegatePropertyName="OnComponentBeginOverlap" DelegateOwnerClass=Class'"/Script/Engine.PrimitiveComponent"' ComponentPropertyName="OverlapCollision" DelegatePropertyDisplayName=NSLOCTEXT("UObjectDisplayNames", "PrimitiveComponent:OnComponentBeginOverlap", "On Component Begin Overlap") EventReference=(MemberParent=Package'"/Script/Engine"',MemberName="ComponentBeginOverlapSignature__DelegateSignature") bInternalEvent=True CustomFunctionName="BndEvt__BP_LightActor_OverlapCollision_K2Node_ComponentBoundEvent_0_ComponentBeginOverlapSignature__DelegateSignature" NodePosX=48 NodePosY=80 NodeGuid=BBCDCF4E488AC70C2C1425807166E35D CustomProperties Pin (PinId=1759D9404D426D8180DC08AED4CC47BD,PinName="OutputDelegate",Direction="EGPD_Output",PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent=BlueprintGeneratedClass'"/Game/Blueprints/BP_LightActor.BP_LightActor_C"',MemberName="BndEvt__BP_LightActor_OverlapCollision_K2Node_ComponentBoundEvent_0_ComponentBeginOverlapSignature__DelegateSignature"),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=3608BECC49E96377DB2960B5B1108C19,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Timeline_0 E50CDF574B8B5BE1ECFB4AB4CE506DCD,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=E89620D04B90AC9AE8C0E791F2FF1B39,PinName="OverlappedComponent",PinToolTip="Overlapped Component\nPrimitive Component Object Reference",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=Class'"/Script/Engine.PrimitiveComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=1778E5CB43BF80FE3F648D940DF0C142,PinName="OtherActor",PinToolTip="Other Actor\nActor Object Reference",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=Class'"/Script/Engine.Actor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=6F3818FC4E9B3EB37CB1A7BD037EBFB7,PinName="OtherComp",PinToolTip="Other Comp\nPrimitive Component Object Reference",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=Class'"/Script/Engine.PrimitiveComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=4C32537F4195796C764B9AB4A1D531EE,PinName="OtherBodyIndex",PinToolTip="Other Body Index\nInteger",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=CCD65B384CBC4EFEC93021905B1DFAFF,PinName="bFromSweep",PinToolTip="From Sweep\nBoolean",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=69378B444803AF25C64D9F8D54850B9B,PinName="SweepResult",PinToolTip="Sweep Result\nHit Result Structure (by ref)",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=ScriptStruct'"/Script/Engine.HitResult"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object -
[Components (コンポーネント)] タブで PointLight コンポーネントを イベント グラフ にドラッグします。
Begin Object Class=/Script/BlueprintGraph.K2Node_VariableGet Name="K2Node_VariableGet_0" VariableReference=(MemberName="PointLight",bSelfContext=True) NodePosX=848 NodePosY=144 NodeGuid=5EB41437410885083479FEB985CC498E CustomProperties Pin (PinId=BE0F44F644A651B59B7B768F23043181,PinName="PointLight",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=Class'"/Script/Engine.PointLightComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_2 B0B1479D4AF0E3B08F76A09E55059CE2,K2Node_Knot_0 F1E8A86F4F35354E9427F38B9E297E03,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=EF8864E146E66B02527255B9E06B6025,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=BlueprintGeneratedClass'"/Game/Blueprints/BP_LightActor.BP_LightActor_C"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object -
PointLight のピンをドラッグし、アクションのメニューに Set Intensity ノードを追加します。
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_2" FunctionReference=(MemberParent=Class'"/Script/Engine.LightComponent"',MemberName="SetIntensity") NodePosX=1040 NodePosY=64 NodeGuid=23E0F4404C18096DF62804AFAA7BC709 CustomProperties Pin (PinId=9C312EB049C5A1020D6797A147DEABB8,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Timeline_0 B34A88804DC700EB96C1A08A8BC63B0E,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=87A5CA2F43E3E67419AFD1A8953F299B,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_3 744D0148419A07627F1A9F978A0C575D,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=B0B1479D4AF0E3B08F76A09E55059CE2,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nLight Component Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=Class'"/Script/Engine.LightComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_VariableGet_0 BE0F44F644A651B59B7B768F23043181,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=FDEA2486488BDE31C3E56B9DDFB9CD27,PinName="NewIntensity",PinToolTip="New Intensity\nFloat (single-precision)",PinType.PinCategory="real",PinType.PinSubCategory="float",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",LinkedTo=(K2Node_PromotableOperator_0 69A2EF8C4A59A02C101F58AD8511E67A,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object -
PointLightTimeline ノードの Light Brightness Float Track ピンをドラッグし、アクションのメニューに Multiply を追加します。
Begin Object Class=/Script/BlueprintGraph.K2Node_PromotableOperator Name="K2Node_PromotableOperator_0" bIsPureFunc=True FunctionReference=(MemberParent=Class'"/Script/Engine.KismetMathLibrary"',MemberName="Multiply_DoubleDouble") NodePosX=864 NodePosY=192 NodeGuid=64A7E68440746F350AC19F86346C4452 CustomProperties Pin (PinId=82EF0A4B4E496697FA249BB6F7507FDF,PinName="A",PinToolTip="A\nFloat (double-precision)",PinType.PinCategory="real",PinType.PinSubCategory="double",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Timeline_0 5D3D277B4502D9621FEE289C0C2C69A1,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=75D0A21342595E689923BA87FB4EF370,PinName="B",PinToolTip="B\nFloat (double-precision)",PinType.PinCategory="real",PinType.PinSubCategory="double",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_VariableGet_1 485EF0D44BC98AA6894EF282D5F53F5F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=69A2EF8C4A59A02C101F58AD8511E67A,PinName="ReturnValue",PinToolTip="Return Value\nFloat (double-precision)\n\nMultiplication (A * B)",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="double",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_2 FDEA2486488BDE31C3E56B9DDFB9CD27,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object -
[My Blueprint (マイ ブループリント)] タブから BrightnessMultiplier の Float 型変数を イベント グラフ にドラッグします。次に Get Brightness Multiplier を選択したら、Multiply ノードに接続します。
Begin Object Class=/Script/BlueprintGraph.K2Node_VariableGet Name="K2Node_VariableGet_1" VariableReference=(MemberName="BrightnessMultiplier",MemberGuid=FCCF7F5E4A6E4FD75FAA849998FE2E92,bSelfContext=True) NodePosX=864 NodePosY=288 NodeGuid=3B08B13441FCF1AEDC7E3CA58137A9D2 CustomProperties Pin (PinId=485EF0D44BC98AA6894EF282D5F53F5F,PinName="BrightnessMultiplier",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="double",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",LinkedTo=(K2Node_PromotableOperator_0 75D0A21342595E689923BA87FB4EF370,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=8978695144D2F58451CFF4858B5A8790,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=BlueprintGeneratedClass'"/Game/Blueprints/BP_LightActor.BP_LightActor_C"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object -
PointLightTimeline の Update ピンを Set Intensity ノードに接続し、Multiply ノードの Return Value ピンを ntensity の New Intensity 入力ピンに接続します。
-
PointLight ノードをドラッグし、アクションのメニューから Set Light Color を選択します。
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_3" FunctionReference=(MemberParent=Class'"/Script/Engine.LightComponent"',MemberName="SetLightColor") NodePosX=1296 NodePosY=64 NodeGuid=43D9BD7C4283FC673F36A1930C3243C6 CustomProperties Pin (PinId=744D0148419A07627F1A9F978A0C575D,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_2 87A5CA2F43E3E67419AFD1A8953F299B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=D792D59441A56ECC8C3D4CB3900F9C66,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=FE00319941A34DE91479318F2093ECE0,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nLight Component Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=Class'"/Script/Engine.LightComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_1 808A85F1410FB25AEFC0C8B494E8DA53,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=BD932EBD48DCC38B6CA11F9AED634AB2,PinName="NewLightColor",PinToolTip="New Light Color\nLinear Color Structure",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_3 912593C04753CE1C51DEF2B3D7CFA5AD,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=6602709A43E5CCC5AB675882406E458C,PinName="bSRGB",PinToolTip="SRGB\nBoolean",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="true",AutogeneratedDefaultValue="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object -
PointLightTimeline ノードの Light Linear Color Track ピンを Set Light Color ノードの New Light Color ピンに接続します。次に、Set Intensity ノードの 実行 ピンを Set Light Color ノードに接続します。
-
[Compile (コンパイル)] と [Save (保存)] ボタンを順にクリックします。
完成したブループリント
レベル設定
作成したコードの機能を最善の状態で実行するには、レベルからすべての光源アクタを削除する必要があります。
-
次に、コンテンツ ブラウザ の BP_LightActor アセットに移動して、それを選択して レベル にドラッグします。
クリックしてフルサイズで表示
-
ワールド アウトライナー で BP_LightActor を選択して、[Details] パネルへ移動して [Location] 設定を (0, 0, 300)、[Scale] 設定を (10, 10, 10) に変更します。
-
アウトライナー で DirectionalLight Actor** を選択します。
-
レベルは以下のようになります。
クリックしてフルサイズで表示
最終結果
これで、Light アクタとレベルを設定できました。Play (PIE) をクリックすると観戦者のポーンの所有権が自動的に得られます。
観戦者のポーンを制御し、Light アクタの Box コンポーネントの境界に移動することができます。
Timeline コンポーネントの Play 関数がトリガーされると、ライトのカラーおよび明るさは 5 秒間で変化していきます。

このドキュメントでは、接触時にカラーが変化し、ゆっくりと消えていく Light アクタの設定方法について説明します。
この設定は、オーバーラップ トリガーとして機能する Box コンポーネントと Point Light アクタを操作する Timeline コンポーネントを含む Point Light コンポーネント を使用して行います。

Fading Light アクタを作成する
-
ブランク テンプレートで C++ プロジェクトを新規作成して「FadingLights」と名前を付けます。
クリックしてフルサイズで表示
-
コンテンツ ブラウザ で「C++ Classes」フォルダをクリックし、[+Add (+追加)] ボタンをクリックして [New C++ Class (新規 C++ クラス)] を選択します。
クリックしてフルサイズで表示
-
アクタ を 親クラス として選択します。
クリックしてフルサイズで表示
-
作成したアクタに「LightActor」という名前を付けます。
クリックしてフルサイズで表示
-
新しいアクタを作成すると、Visual Studio では自動的に「
LightActor.h
」と「LightActor.cpp
」ファイルが開かれます。LightActor.h
ファイルに移動して次のように宣言します。LightActor.h
#include "Components/TimelineComponent.h"
-
次に、
LightActor
クラスの定義に次のコードを追加します。LightActor.h
public: UPROPERTY(EditAnywhere) UCurveFloat* PointLightFloatCurve; UPROPERTY(EditAnywhere) UCurveLinearColor* PointLightColorCurve; protected: //ポイントライト コンポーネントをアニメートするための TimelineComponent です。 UPROPERTY(VisibleAnywhere, BlueprintReadWrite) UTimelineComponent* LightTimelineComp; //近接オーバーラップボリュームとして使用される BoxComponent です。 UPROPERTY(EditAnywhere, BlueprintReadWrite) class UBoxComponent* LightOverlapVolume; UPROPERTY(EditAnywhere,BlueprintReadWrite) class UPointLightComponent* PointLightComp; //ポイントライトの明るさに使用されるトラック FOnTimelineFloat UpdateBrightnessTrack; //ポイントライトの色に使用されるトラック FOnTimelineLinearColor UpdateColorTrack; //UpdateBrightnessTrack を基準にライトの明るさを更新する関数 UFUNCTION() void UpdateLightBrightness(float BrightnessOutput); //UpdateColorTrack を基準にライトの色を更新する関数 UFUNCTION() void UpdateLightColor(FLinearColor ColorOutput); UPROPERTY(EditDefaultsOnly) float BrightnessMultiplier;
-
LightActor.cpp
に移動し、次のクラス ライブラリを追加します。LightActor.cpp
#include "Components/BoxComponent.h" #include "Components/PointLightComponent.h"
-
ALightActor::ALightActor
のコンストラクタで、次のように宣言します。LightActor.cpp
ALightActor::ALightActor() { // フレームごとに Tick() を呼び出すようにこのアクタを設定します。必要ない場合は、パフォーマンス向上のためにこれをオフにすることができます。 PrimaryActorTick.bCanEverTick = true; //デフォルト コンポーネントを作成します PointLightComp = CreateDefaultSubobject<UPointLightComponent>(TEXT("PointLightComp")); LightTimelineComp = CreateDefaultSubobject<UTimelineComponent>(TEXT("LightTimelineComp")); LightOverlapVolume = CreateDefaultSubobject<UBoxComponent>(TEXT("LightOverlapVolume")); //アタッチメントを設定します RootComponent = LightOverlapVolume; PointLightComp->AttachToComponent(LightOverlapVolume, FAttachmentTransformRules::KeepRelativeTransform); //輝度倍数を初期化します BrightnessMultiplier = 20.0f; }
-
次にポイントライト コンポーネントの
UFunction
メソッドを実装します。LightActor.cpp
void ALightActor::UpdateLightBrightness(float BrightnessOutput) { PointLightComp->SetLightBrightness(BrightnessOutput * 20.0f); } void ALightActor::UpdateLightColor(FLinearColor ColorOutput) { PointLightComp->SetLightColor(ColorOutput); }
-
次に、
BeginPlay
メソッドに次のコードを追加します。LightActor.cpp
void ALightActor::BeginPlay() { Super::BeginPlay(); //float と color track をそれぞれの関数にバインドします UpdateBrightnessTrack.BindDynamic(this, &ALightActor::UpdateLightBrightness); UpdateColorTrack.BindDynamic(this, &ALightActor::UpdateLightColor); //Float カーブがある場合は、そのグラフを更新関数にバインドします if (PointLightFloatCurve) { LightTimelineComp->AddInterpFloat(PointLightFloatCurve, UpdateBrightnessTrack); } //リニア カラー カーブがある場合は、そのグラフを更新関数にバインドします if (PointLightColorCurve) { LightTimelineComp->AddInterpLinearColor(PointLightColorCurve, UpdateColorTrack); } }
-
コードをコンパイルします。
-
コンテンツ ブラウザ で、「C++ Classes」フォルダに移動します。
-
LightActor を右クリックして [Create Blueprint Class based on LightActor (LightActor に基づいてブループリント クラスを作成する)] を選択し、Blueprint アクタの名前を「BP_LightActor」にします。
BP_LightActor のクラスのデフォルトが、次のように表示されます。
クリックしてフルサイズで表示
作成中のコード
LightActor.h
//Copyright 1998-2022 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Components/TimelineComponent.h"
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "LightActor.generated.h"
UCLASS()
class FADINGLIGHTS_API ALightActor : public AActor
{
GENERATED_BODY()
public:
// このアクタのプロパティのデフォルト値を設定します。
ALightActor();
protected:
// ゲームの開始時またはスポーン時に呼び出します。
virtual void BeginPlay() override;
public:
// フレームごとに呼び出します。
virtual void Tick(float DeltaTime) override;
public:
UPROPERTY(EditAnywhere)
UCurveFloat* PointLightFloatCurve;
UPROPERTY(EditAnywhere)
UCurveLinearColor* PointLightColorCurve;
protected:
//ポイントライト コンポーネントをアニメートするための TimelineComponent です。
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
UTimelineComponent* LightTimelineComp;
//近接オーバーラップボリュームとして使用される BoxComponent です。
UPROPERTY(EditAnywhere, BlueprintReadWrite)
class UBoxComponent* LightOverlapVolume;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
class UPointLightComponent* PointLightComp;
//ポイントライトの明るさに使用されるトラック
FOnTimelineFloat UpdateBrightnessTrack;
//ポイントライトの色に使用されるトラック
FOnTimelineLinearColor UpdateColorTrack;
//UpdateBrightnessTrack を基準にライトの明るさを更新する関数
UFUNCTION()
void UpdateLightBrightness(float BrightnessOutput);
//UpdateColorTrack を基準にライトの色を更新する関数
UFUNCTION()
void UpdateLightColor(FLinearColor ColorOutput);
UPROPERTY(EditDefaultsOnly)
float BrightnessMultiplier;
};
LightActor.cpp
//Copyright 1998-2022 Epic Games, Inc. All Rights Reserved.
#include "LightActor.h"
#include "Components/BoxComponent.h"
#include "Components/PointLightComponent.h"
// デフォルト値を設定します。
ALightActor::ALightActor()
{
// フレームごとに Tick() を呼び出すようにこのアクタを設定します。必要ない場合は、パフォーマンス向上のためにこれをオフにすることができます。
PrimaryActorTick.bCanEverTick = true;
//デフォルト コンポーネントを作成します
PointLightComp = CreateDefaultSubobject<UPointLightComponent>(TEXT("PointLightComp"));
LightTimelineComp = CreateDefaultSubobject<UTimelineComponent>(TEXT("LightTimelineComp"));
LightOverlapVolume = CreateDefaultSubobject<UBoxComponent>(TEXT("LightOverlapVolume"));
//アタッチメントを設定します
RootComponent = LightOverlapVolume;
PointLightComp->AttachToComponent(LightOverlapVolume, FAttachmentTransformRules::KeepRelativeTransform);
//輝度倍数を初期化します
BrightnessMultiplier = 20.0f;
}
// ゲームの開始時またはスポーン時に呼び出します。
void ALightActor::BeginPlay()
{
Super::BeginPlay();
//float と color track をそれぞれの関数にバインドします
UpdateBrightnessTrack.BindDynamic(this, &ALightActor::UpdateLightBrightness);
UpdateColorTrack.BindDynamic(this, &ALightActor::UpdateLightColor);
//Float カーブがある場合は、そのグラフを更新関数にバインドします
if (PointLightFloatCurve)
{
LightTimelineComp->AddInterpFloat(PointLightFloatCurve, UpdateBrightnessTrack);
}
//リニア カラー カーブがある場合は、そのグラフを更新関数にバインドします
if (PointLightColorCurve)
{
LightTimelineComp->AddInterpLinearColor(PointLightColorCurve, UpdateColorTrack);
}
}
// フレームごとに呼び出します。
void ALightActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
void ALightActor::UpdateLightBrightness(float BrightnessOutput)
{
PointLightComp->SetLightBrightness(BrightnessOutput * 20.0f);
}
void ALightActor::UpdateLightColor(FLinearColor ColorOutput)
{
PointLightComp->SetLightColor(ColorOutput);
}
コリジョン オーバーラップ イベントを作成してバインディングする
Box コンポーネントには、アクタがコリジョンの境界を入力するときに TimelineComponent をトリガーする機能が必要です。
-
LightActor.h
ファイルのクラス定義に移動し、BrightnessMultiplier
の下で次のように宣言します。LightActor.h
protected: UFUNCTION() void OnOverlapBegin(class UPrimitiveComponent* OverlappedComp, class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
-
次に、
LightActor.cpp
ファイルに移動してOnOverlapBegin
関数を実装します。LightActor.cpp
void ALightActor::OnOverlapBegin(class UPrimitiveComponent* OverlappedComp, class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) { LightTimelineComp->Play(); }
-
BeginPlay
メソッドで Overlap 関数をバインドします。LightActor.cpp
//Box コンポーネントを Light アクタの Overlap 関数にバインドします LightOverlapVolume->OnComponentBeginOverlap.AddDynamic(this, &ALightActor::OnOverlapBegin);
-
コードをコンパイルします。
完成コード
LightActor.h
//Copyright 1998-2022 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Components/TimelineComponent.h"
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "LightActor.generated.h"
UCLASS()
class FADINGLIGHTS_API ALightActor : public AActor
{
GENERATED_BODY()
public:
// このアクタのプロパティのデフォルト値を設定します。
ALightActor();
protected:
// ゲームの開始時またはスポーン時に呼び出します。
virtual void BeginPlay() override;
public:
// フレームごとに呼び出します。
virtual void Tick(float DeltaTime) override;
public:
UPROPERTY(EditAnywhere)
UCurveFloat* PointLightFloatCurve;
UPROPERTY(EditAnywhere)
UCurveLinearColor* PointLightColorCurve;
protected:
//ポイントライト コンポーネントをアニメートするための TimelineComponent です。
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
UTimelineComponent* LightTimelineComp;
//近接オーバーラップボリュームとして使用される BoxComponent です。
UPROPERTY(EditAnywhere, BlueprintReadWrite)
class UBoxComponent* LightOverlapVolume;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
class UPointLightComponent* PointLightComp;
//ポイントライトの明るさに使用されるトラック
FOnTimelineFloat UpdateBrightnessTrack;
//ポイントライトの色に使用されるトラック
FOnTimelineLinearColor UpdateColorTrack;
//UpdateBrightnessTrack を基準にライトの明るさを更新する関数
UFUNCTION()
void UpdateLightBrightness(float BrightnessOutput);
//UpdateColorTrack を基準にライトの色を更新する関数
UFUNCTION()
void UpdateLightColor(FLinearColor ColorOutput);
UPROPERTY(EditDefaultsOnly)
float BrightnessMultiplier;
protected:
UFUNCTION()
void OnOverlapBegin(class UPrimitiveComponent* OverlappedComp, class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
};
LightActor.cpp
//Copyright 1998-2022 Epic Games, Inc. All Rights Reserved.
// プロジェクト設定の説明ページの著作権表示を入力します。
#include "LightActor.h"
#include "Components/BoxComponent.h"
#include "Components/PointLightComponent.h"
// デフォルト値を設定します。
ALightActor::ALightActor()
{
// フレームごとに Tick() を呼び出すようにこのアクタを設定します。必要ない場合は、パフォーマンス向上のためにこれをオフにすることができます。
PrimaryActorTick.bCanEverTick = true;
//デフォルト コンポーネントを作成します
PointLightComp = CreateDefaultSubobject<UPointLightComponent>(TEXT("PointLightComp"));
LightTimelineComp = CreateDefaultSubobject<UTimelineComponent>(TEXT("LightTimelineComp"));
LightOverlapVolume = CreateDefaultSubobject<UBoxComponent>(TEXT("LightOverlapVolume"));
//アタッチメントを設定します
RootComponent = LightOverlapVolume;
PointLightComp->AttachToComponent(LightOverlapVolume, FAttachmentTransformRules::KeepRelativeTransform);
//輝度倍数を初期化します
BrightnessMultiplier = 20.0f;
}
// ゲームの開始時またはスポーン時に呼び出します。
void ALightActor::BeginPlay()
{
Super::BeginPlay();
//float と color track をそれぞれの関数にバインドします
UpdateBrightnessTrack.BindDynamic(this, &ALightActor::UpdateLightBrightness);
UpdateColorTrack.BindDynamic(this, &ALightActor::UpdateLightColor);
//Float カーブがある場合は、そのグラフを更新関数にバインドします
if (PointLightFloatCurve)
{
LightTimelineComp->AddInterpFloat(PointLightFloatCurve, UpdateBrightnessTrack);
}
//リニア カラー カーブがある場合は、そのグラフを更新関数にバインドします
if (PointLightColorCurve)
{
LightTimelineComp->AddInterpLinearColor(PointLightColorCurve, UpdateColorTrack);
}
//Box コンポーネントを Light アクタの Overlap 関数にバインドします
LightOverlapVolume->OnComponentBeginOverlap.AddDynamic(this, &ALightActor::OnOverlapBegin);
}
// フレームごとに呼び出します。
void ALightActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
void ALightActor::UpdateLightBrightness(float BrightnessOutput)
{
PointLightComp->SetLightBrightness(BrightnessOutput * 20.0f);
}
void ALightActor::UpdateLightColor(FLinearColor ColorOutput)
{
PointLightComp->SetLightColor(ColorOutput);
}
void ALightActor::OnOverlapBegin(class UPrimitiveComponent* OverlappedComp, class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
LightTimelineComp->Play();
}
Brightness トラックを設定する
プレイヤーが Light アクタの Box コンポーネントの境界に重なる場合、Timeline コンポーネントでは Point Light コンポーネントの輝度の値を操作するための Float カーブが必要になります。
明るさの初期値は「5000」で、5 秒間で「0」まで減少します。
-
コンテンツ ブラウザ に移動し、[+Add] > [Miscellaneous (その他)] > [Curve (カーブ)] を選択します。
-
[CurveFloat] を選択してアセットの名前を「BrightnessCurveFloat」にします。
-
[BrightnessCurveFloat] をダブルクリックして タイムライン エディタ を開きます。
-
グラフ をクリックして [Add Key (キーを追加)] を選択して、2 つのキーを Float カーブに追加します。1 つめのキーの時間値を (0, 5000) に調節します。2 つめのキーの時間値を (5, 0) に調節します。BrightnessCurveFloat は以下のようになります。
クリックしてフルサイズで表示
-
[BrightnessCurveFloat] を保存してから コンテンツ ブラウザ に戻り、[BP_LightActor] をダブルクリックして [Class Defaults (クラスのデフォルト)] を開きます。
-
[Details] パネルに移動し、[Point Light Float Curve] のドロップダウン メニューから [Brightness Curve Float] を選択します。
-
[Compile (コンパイル)] ボタンと [Save (保存)] ボタンを順にクリックします。
カラー トラックを設定する
プレイヤーが Light アクタの Box コンポーネントの境界に重なる場合、PointLight タイムラインでは Point Light コンポーネントのカラー プロパティを操作するための線形カラー カーブ トラックが必要になります。
-
コンテンツ ブラウザ に移動し、[+Add] > [Miscellaneous (その他)] > [Curve (カーブ)] を選択します。
-
[CurveLinearColor] を選択してアセットの名前を 「LinearColorCurve」 にします。
-
[LinearColorCurve] をダブルクリックして タイムライン エディタ を開きます。
-
最初のカラー キーをダブルクリックして、RGB の値を (R:1, G:0.665, B:0.015) に変更します。
クリックしてフルサイズで表示
-
2 つめのカラー キーをダブルクリックして、RGB の値を (R:0, G:0, B:0) に変更します。
クリックしてフルサイズで表示
-
グラフ で 2 つめの 点 を選択して時間を 5 秒に設定します。
クリックしてフルサイズで表示
-
LinearColorCurve は以下のようになります。
クリックしてフルサイズで表示
-
[LinearColorCurve] を保存してからコンテンツ ブラウザに戻り、[BP_LightActor] をダブルクリックして [Class Defaults] を開きます。
-
[Details] パネルに移動し、[Point Light Float Curve] のドロップダウン メニューから [Brightness Curve Float] を選択します。
-
[Compile (コンパイル)] ボタンと [Save (保存)] ボタンを順にクリックします。
レベル設定
作成したコードの機能を最善の状態で実行するには、レベルからすべての光源アクタを削除する必要があります。
-
コンテンツ ブラウザ で BP_LightActor アセットに移動して、それを選択して レベル にドラッグします。
クリックしてフルサイズで表示
-
[World Outliner (アウトライナ)] で BP_LightActor を選択して、[Details] パネルへ移動して [Location] 設定を (0, 0, 300)、[Scale] 設定を (10, 10, 10) に変更します。
-
[World Outliner] で DirectionalLight アクタ を選択します。
-
レベルは以下のようになります。
クリックしてフルサイズで表示
最終結果
これで、Light アクタとレベルを設定できました。Play (PIE) をクリックすると観戦者のポーンの所有権が自動的に得られます。
観戦者のポーンを制御し、Light アクタの Box コンポーネントの境界に移動することができます。
Timeline コンポーネントの Play 関数がトリガーされると、ライトのカラーおよび明るさは 5 秒間で変化していきます。
