Download

Poltergeist Blueprint - How to Throw Physics Objects?

I’m working on a horror game and I would like to have physics objects interact randomly with the player as if a Poltergeist were possessing the objects. To add some unpredictability I’m hoping for cool BP system as suggested below and I wondered if I could get some general pointers.

I can imagine some alternative ways to achieve a similar effect but here’s my prefered idea. The player character contains a trigger sphere which controls the range that interactions take place. Once the trigger overlaps a physics object maybe 1/20 times the overlap causes an in range object to move/jolt, ideally also with a varying degree of intensity. This would mean many physics objects would be ignored most of the time but on occasions objects could move very slightly or fling across the room. My main question is can I do this with a single BP in the player character interacting with simple static phyics meshes or will all the individual physics objects need to be BP’s, also how do I ensure the “jolt/fling” respects the mass of the interacting object. For example it makes sense that the bottles would fling further than lockers which would barely move.

I think this system could benefit lots of begginers working on horror games and once I get this system working I will share my setup.

If I understand correctly, you want something like this?

[video]- YouTube

For this, like you say, I have a collision sphere attached to the player,
with radius: 500,
collision: Overlap Dynamic

I also have a blueprint actor called “BP_Poltergeist_Parent” this contains a static mesh with physics enabled
I would use this the parent class, and derive children from it,
E.G
BP_Poltergeist_Table
BP_Poltergeist_Bottle

for all the objects you want to be affected by the poltergeist

anywho

in the BP_Poltergeist_Parent I have a custom event called “Move”

When the player’s collision sphere overlaps anything, it casts to the BP_Poltergeist_Parent to check what it’s overlapped is the right object,
on a successful cast, it will call the custom event “Move”

This “Move” event, picks a random delay in seconds before it checks to see if it will move or not
then it picks a random float between 0 and 100, and compares it against that objects chance to move
then a random force to apply to the object and finally,
it picks a random point on the object to apply that force to.

Now this method only moves the object once when you come into range

If you’d like the object to continue to move again, without you having to go out of range, and them come back in range

You could create a custom event in the BP_Poltergeist_Parent called “StopMove”

Now you need to run the force checks, and all that goodness off of “Event Tick”, through a Gate, Opened by Event “Move” and closed by Event “StopMove”

In the player blueprint, You’ll need to have “OnComponentEndOverlap” Cast to BP_Poltergeist_Parent and then call the new “StopMove” Event

Hope this helps, Cheers

Aidan C

Edit: Values I used are as follows

Move Chance: 20
Max Move Force : 100000.0
Max Move Delay : 4.0

This has peaked my interest actually,
so I gave it another go and improved somewhat

[video]https://youtu.be/BwFr7dQALk0[/video]

I changed it so it’s less, jumping bean, impulsey
and more spooky pushes

Variable values for this set up:

Move Chance: 50
Max Move Force: 200000
Min Move Force : 100000
Max Move Delay: 4
Max Force Duration: 0.6