My original intention was to make two rooms, one with the ghost, and one without the ghost where the player walks around. I would capture the ghost from the first room and project it onto a mirror in the second room to give the illusion that the ghost can only be seen in the mirror.
Ways I attempted this and why they didn't work:
1. Scene capture actors rendered to 2d textures
-Looked weird because the image moved with the character
-no reflections
2. Scene capture reflect actors
-had reflections but no way of rendering a remote texture
3. Scene capture portal actors
-worked perfectly except they made udk crash everytime I tried to play.
4. Decal on top of mirror
-didn't have the right aesthetic
5. Making the ghost appear only when the player is turned away from it
-This may have worked, but I couldn't figure it out. I could set the players rotation but it wouldn't affect the ghost mesh.
- I did notice that you can make a player rotate against its will by using set player rotation, which could be interesting for something else
I ended up placing a trigger close to the mirror (Scene capture reflect actor) that when touched makes the ghost appear and when untouched makes it hidden again. You can still turn around and see it but if you try to go near it it disappears.
Another mechanic I implemented was a flickering flash light that has to be turned back on whenever it goes out. This was much simpler and turned out well.
The Flashlight
The flashlight is just a spotlight attached to the player that is turned on by a trigger set to the E key that is also attached to the player. It stays on for 3 seconds during which the brightness is animated with a matinee sequence to get the flickering effect.
The Ghost
This is a simplified version of what I really wanted to do. Basically the ghost appears when you are standing in front of the mirror (Scene capture reflect actor) and disappears when you move from it. I also added a trigger that causes damage when you step where the ghost appeared.
The Kismet
Begin Object Class=SeqEvent_Used Name=SeqEvent_Used_0
bAimToInteract=False
InteractDistance=1024.000000
Originator=Trigger'Trigger_1'
MaxTriggerCount=0
MaxWidth=169
OutputLinks(0)=(Links=((LinkedOp=SeqAct_Interp'SeqAct_Interp_0')),DrawY=516)
OutputLinks(1)=(DrawY=536)
VariableLinks(0)=(DrawX=872)
VariableLinks(1)=(DrawX=948)
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=824
ObjPosY=448
ObjName="Trigger_1 Used"
DrawWidth=116
DrawHeight=152
Name="SeqEvent_Used_0"
ObjectArchetype=SeqEvent_Used'Engine.Default__SeqEvent_Used'
End Object
Begin Object Class=SeqAct_AttachToActor Name=SeqAct_AttachToActor_0
BoneName="b_LeftHand"
RelativeOffset=(X=0.000000,Y=0.000000,Z=20.000000)
InputLinks(0)=(DrawY=874)
OutputLinks(0)=(Links=((LinkedOp=SeqAct_AttachToActor'SeqAct_AttachToActor_1')),DrawY=874)
VariableLinks(0)=(LinkedVariables=(SeqVar_Player'SeqVar_Player_2'),DrawX=918)
VariableLinks(1)=(LinkedVariables=(SeqVar_Object'SeqVar_Object_1'),DrawX=995)
ObjInstanceVersion=2
ParentSequence=Sequence'Main_Sequence'
ObjPosX=880
ObjPosY=840
DrawWidth=170
DrawHeight=61
Name="SeqAct_AttachToActor_0"
ObjectArchetype=SeqAct_AttachToActor'Engine.Default__SeqAct_AttachToActor'
End Object
Begin Object Class=SeqVar_Object Name=SeqVar_Object_1
ObjValue=Trigger'Trigger_1'
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=952
ObjPosY=944
DrawWidth=32
DrawHeight=32
Name="SeqVar_Object_1"
ObjectArchetype=SeqVar_Object'Engine.Default__SeqVar_Object'
End Object
Begin Object Class=SeqVar_Player Name=SeqVar_Player_2
bAllPlayers=False
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=840
ObjPosY=928
DrawWidth=32
DrawHeight=32
Name="SeqVar_Player_2"
ObjectArchetype=SeqVar_Player'Engine.Default__SeqVar_Player'
End Object
Begin Object Class=SeqAct_AttachToActor Name=SeqAct_AttachToActor_1
InputLinks(0)=(DrawY=970)
OutputLinks(0)=(DrawY=970)
VariableLinks(0)=(LinkedVariables=(SeqVar_Player'SeqVar_Player_1'),DrawX=1174)
VariableLinks(1)=(LinkedVariables=(SeqVar_Object'SeqVar_Object_0'),DrawX=1251)
ObjInstanceVersion=2
ParentSequence=Sequence'Main_Sequence'
ObjPosX=1136
ObjPosY=936
DrawWidth=170
DrawHeight=61
Name="SeqAct_AttachToActor_1"
ObjectArchetype=SeqAct_AttachToActor'Engine.Default__SeqAct_AttachToActor'
End Object
Begin Object Class=SeqVar_Player Name=SeqVar_Player_1
bAllPlayers=False
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=1128
ObjPosY=1024
DrawWidth=32
DrawHeight=32
Name="SeqVar_Player_1"
ObjectArchetype=SeqVar_Player'Engine.Default__SeqVar_Player'
End Object
Begin Object Class=SeqVar_Object Name=SeqVar_Object_0
ObjValue=SpotLightMovable'SpotLightMovable_0'
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=1224
ObjPosY=1048
DrawWidth=32
DrawHeight=32
Name="SeqVar_Object_0"
ObjectArchetype=SeqVar_Object'Engine.Default__SeqVar_Object'
End Object
Begin Object Class=SeqEvent_PlayerSpawned Name=SeqEvent_PlayerSpawned_0
MaxWidth=156
OutputLinks(0)=(Links=((LinkedOp=SeqAct_AttachToActor'SeqAct_AttachToActor_0'),(LinkedOp=SeqAct_Interp'SeqAct_Interp_0'),(LinkedOp=SeqAct_ToggleHidden'SeqAct_ToggleHidden_3')),DrawY=866)
VariableLinks(0)=(DrawX=672)
VariableLinks(1)=(LinkedVariables=(SeqVar_Object'SeqVar_Object_4'),DrawX=742)
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=624
ObjPosY=800
DrawWidth=98
DrawHeight=144
Name="SeqEvent_PlayerSpawned_0"
ObjectArchetype=SeqEvent_PlayerSpawned'Engine.Default__SeqEvent_PlayerSpawned'
End Object
Begin Object Class=SeqVar_Object Name=SeqVar_Object_4
ObjValue=PlayerStart'PlayerStart_2'
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=728
ObjPosY=984
DrawWidth=32
DrawHeight=32
Name="SeqVar_Object_4"
ObjectArchetype=SeqVar_Object'Engine.Default__SeqVar_Object'
End Object
Begin Object Class=SeqAct_Interp Name=SeqAct_Interp_0
bRewindOnPlay=True
InputLinks(0)=(DrawY=480)
InputLinks(1)=(DrawY=502)
InputLinks(2)=(DrawY=524)
InputLinks(3)=(DrawY=546)
InputLinks(4)=(DrawY=568)
OutputLinks(0)=(DrawY=496,OverrideDelta=31)
OutputLinks(1)=(DrawY=552,OverrideDelta=87)
VariableLinks(0)=(LinkedVariables=(InterpData'InterpData_0'),DrawX=1074,OverrideDelta=20)
VariableLinks(1)=(ExpectedType=Class'Engine.SeqVar_Object',LinkedVariables=(SeqVar_Object'SeqVar_Object_2'),LinkDesc="NewGroup",MinVars=0,DrawX=1139,OverrideDelta=67)
ObjInstanceVersion=2
ParentSequence=Sequence'Main_Sequence'
ObjPosX=1039
ObjPosY=442
DrawWidth=154
DrawHeight=157
Name="SeqAct_Interp_0"
ObjectArchetype=SeqAct_Interp'Engine.Default__SeqAct_Interp'
End Object
Begin Object Class=InterpData Name=InterpData_0
Begin Object Class=InterpCurveEdSetup Name=InterpCurveEdSetup_0
Tabs(0)=(Curves=((CurveObject=InterpTrackFloatProp'InterpTrackFloatProp_0',CurveColor=(B=0,G=203,R=126,A=255),CurveName="NewGroup_Brightness")),ViewStartInput=-0.037168,ViewEndInput=2.962831,ViewStartOutput=0.113018,ViewEndOutput=1.313017)
Name="InterpCurveEdSetup_0"
ObjectArchetype=InterpCurveEdSetup'Engine.Default__InterpCurveEdSetup'
End Object
Begin Object Class=InterpGroup Name=InterpGroup_0
Begin Object Class=InterpTrackFloatProp Name=InterpTrackFloatProp_0
PropertyName="SpotLightComponent0.Brightness"
FloatTrack=(Points=((OutVal=2.000000,InterpMode=CIM_CurveAutoClamped),(InVal=1.000000,OutVal=0.719917,ArriveTangent=-0.686462,LeaveTangent=-0.686462,InterpMode=CIM_CurveAutoClamped),(InVal=1.500000,OutVal=0.500000,ArriveTangent=-0.424928,LeaveTangent=-0.424928,InterpMode=CIM_CurveAutoClamped),(InVal=1.750000,OutVal=0.400000,ArriveTangent=-0.760360,LeaveTangent=-0.760360,InterpMode=CIM_CurveAutoClamped),(InVal=2.000000,InterpMode=CIM_CurveAutoClamped),(InVal=2.100000,OutVal=0.300000,InterpMode=CIM_CurveAutoClamped),(InVal=2.200000,InterpMode=CIM_CurveAutoClamped),(InVal=2.300000,OutVal=0.300000,InterpMode=CIM_CurveAutoClamped),(InVal=2.500000,InterpMode=CIM_CurveAutoClamped),(InVal=2.750000,OutVal=0.200000,InterpMode=CIM_CurveAutoClamped),(InVal=3.000000,InterpMode=CIM_CurveAutoClamped)))
TrackTitle="Brightness"
Name="InterpTrackFloatProp_0"
ObjectArchetype=InterpTrackFloatProp'Engine.Default__InterpTrackFloatProp'
End Object
InterpTracks(0)=InterpTrackFloatProp'InterpTrackFloatProp_0'
GroupName="NewGroup"
GroupColor=(B=0,G=203,R=126,A=255)
Name="InterpGroup_0"
ObjectArchetype=InterpGroup'Engine.Default__InterpGroup'
End Object
InterpLength=3.000000
InterpGroups(0)=InterpGroup'InterpGroup_0'
CurveEdSetup=InterpCurveEdSetup'InterpCurveEdSetup_0'
SelectedFilter=InterpFilter'Engine.Default__InterpData:FilterAll'
EdSectionStart=0.000000
EdSectionEnd=3.000000
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=1112
ObjPosY=632
DrawWidth=32
DrawHeight=32
Name="InterpData_0"
ObjectArchetype=InterpData'Engine.Default__InterpData'
End Object
Begin Object Class=SeqVar_Object Name=SeqVar_Object_2
ObjValue=SpotLightMovable'SpotLightMovable_0'
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=1160
ObjPosY=616
DrawWidth=32
DrawHeight=32
Name="SeqVar_Object_2"
ObjectArchetype=SeqVar_Object'Engine.Default__SeqVar_Object'
End Object
Begin Object Class=SeqEvent_Touch Name=SeqEvent_Touch_1
Originator=Trigger'Trigger_2'
MaxTriggerCount=0
MaxWidth=118
OutputLinks(0)=(Links=((LinkedOp=SeqAct_ToggleHidden'SeqAct_ToggleHidden_3',InputLinkIdx=1)),DrawY=1205)
OutputLinks(1)=(Links=((LinkedOp=SeqAct_ToggleHidden'SeqAct_ToggleHidden_3')),DrawY=1226)
OutputLinks(2)=(DrawY=1247)
VariableLinks(0)=(DrawX=1451)
ObjInstanceVersion=2
ParentSequence=Sequence'Main_Sequence'
ObjPosX=1392
ObjPosY=1136
ObjName="Trigger_2 Touch"
DrawWidth=104
DrawHeight=176
Name="SeqEvent_Touch_1"
ObjectArchetype=SeqEvent_Touch'Engine.Default__SeqEvent_Touch'
End Object
Begin Object Class=SeqAct_ToggleHidden Name=SeqAct_ToggleHidden_3
InputLinks(0)=(DrawY=1213)
InputLinks(1)=(DrawY=1234)
InputLinks(2)=(DrawY=1255)
OutputLinks(0)=(DrawY=1234)
VariableLinks(0)=(LinkedVariables=(SeqVar_Object'SeqVar_Object_8'),DrawX=1606)
VariableLinks(1)=(DrawX=1657)
EventLinks(0)=(DrawX=1706)
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=1568
ObjPosY=1176
DrawWidth=173
DrawHeight=109
Name="SeqAct_ToggleHidden_3"
ObjectArchetype=SeqAct_ToggleHidden'Engine.Default__SeqAct_ToggleHidden'
End Object
Begin Object Class=SeqVar_Object Name=SeqVar_Object_8
ObjValue=InterpActor'InterpActor_1'
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=1584
ObjPosY=1304
DrawWidth=32
DrawHeight=32
Name="SeqVar_Object_8"
ObjectArchetype=SeqVar_Object'Engine.Default__SeqVar_Object'
End Object
Begin Object Class=SequenceFrameWrapped Name=SequenceFrameWrapped_0
SizeX=493
SizeY=328
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=840
ObjPosY=400
ObjComment="Turn Flashlight on, trigger light flicker animation"
Name="SequenceFrameWrapped_0"
ObjectArchetype=SequenceFrameWrapped'Engine.Default__SequenceFrameWrapped'
End Object
Begin Object Class=SequenceFrame Name=SequenceFrame_0
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=856
ObjPosY=824
ObjComment="Attach Trigger for light to player"
DrawWidth=128
DrawHeight=64
Name="SequenceFrame_0"
ObjectArchetype=SequenceFrame'Engine.Default__SequenceFrame'
End Object
Begin Object Class=SequenceFrame Name=SequenceFrame_2
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=1136
ObjPosY=920
ObjComment="attach spotlight to player"
DrawWidth=128
DrawHeight=64
Name="SequenceFrame_2"
ObjectArchetype=SequenceFrame'Engine.Default__SequenceFrame'
End Object
Begin Object Class=SequenceFrameWrapped Name=SequenceFrameWrapped_1
SizeX=413
SizeY=335
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=1360
ObjPosY=1072
ObjComment="triggers visibility of the ghost"
Name="SequenceFrameWrapped_1"
ObjectArchetype=SequenceFrameWrapped'Engine.Default__SequenceFrameWrapped'
End Object