Pick Up Plus Inspect - PUPI (PUPO v2.0)

Hey everyone,

Pick Up Plus Inspect - PUPI](Pick Up Plus Inspect in Blueprints - UE Marketplace) is new version of our first marketplace content known as Pick Up Physics Object - PUPO, with lots of new features :). With this blueprint you can add physics based interactivity and inspect feature to your project in a few minutes. PUPI supports VR for UE4.11+. PUPI_Thumb.png



  • Access events of PUPI from other actors and extend functionality by using pre-made EventDispatchers. Usage examples can be found in FirstPerson and TopDown demo character,
  • Inputs can be easily changed using Input Mappings,
  • Controls for PUPI will be enabled and disabled automatically letting you set inputs without worrying about overriding other controls (example: if fire and pick up Mappings have the same key, fire will be ignored when something can be picked up/inspected and vice-versa),
  • Configurable Easing animations for picking up and putting back Inspectable,
  • Set default PUPI settings by using PUPISettings structure or configure PUPI(s) by using PUPISettings Actor Component.


Update 3 (for UE4.18+):

  • Changed setup process to use Scene Component instead of adding Child Actor Component,
  • Added a “button” to PUPI component to add Input Mappings via single click instead of adding/writing them manually inside Project Settings -> Input,
  • Removed PUPISettings component as it is not needed to configure PUPI any longer because of first change :).

Update 2:

  • Changed content type to Asset Pack - you can now add this to your project by pressing Add to Project without having to manually migrate it,
  • Added ability to clamp Pitch to (-20, 20) when rotating object. You can do this by adding a tag “ClampPitch” to component (not to Actor),
  • Added option to change Trace visibility, to PUPISettings -> Main,
  • Added option to disable Depth of Field when inspecting, to PUPISettings -> Inspect,
  • Added option to rotate on Local axis, to PUPISettings -> Pick Up,
  • Fixed an issue with Inspect Auto Scale - report,
  • Changed demo character controls to key events instead of Input Mappings. This was done to reduce the steps of setting up Demo characters,
  • Replaced deprecated nodes for UE4.14+.

Update 1:

  • Configurable Easing “animation” for picking up and putting back Inspectable object.
  • IgnorePUPI tag to make PUPI ignore certain objects even if they have physics enabled.
  • PUPISettings Actor Component. It allows to have different configurations for multiple character in same level. (Can’t have different Outline colors for each PUPI at the same time. However Outline settings can be changed in real-time)



Set up for update 3 (UE4.18+):[spoiler]

  1. Drag and drop BP_PUPI_Component into Character/Pawn,
  2. Set properties in Details Panel,
  3. Click** Add Default Input Mappings** if this is first time setup in this project (Mappings will be added to Project Settings -> Input)


Accessing Event Dispatchers:[spoiler]

  1. Select BP_PUPI_Component,
  2. Scroll down in Details Panel to Events category and press green “+” button to add the event


Set up for update 2 (UE4.17 and below):[spoiler]

  1. Drag and drop PUPI into Character/Pawn blueprint(or add as child actor and select PUPI as class)
  2. Set up Input Mappings,
  3. Configure(or leave at default) PUPISettings,
  4. Continue with the rest of your project


HTC Vive set up (both controllers in same actor):[spoiler]

  1. Add two MotionController components. (left and right as usual)
  2. Add/attach PUPI to each MotionController. Optionally attach SkeletalMesh or anything to MotionControllers to see them in game
    (for UE4.18+ add BP_PUPI_Component and in Details Panel -> Properties -> Main - Motion Controller Hand select proper hand (Left/Right))
    Should look like this: PUPIinMCs.png
  3. Pick Up Plus Inspect - PUPI [Update 1] - YouTube
    (for UE4.18+ no need to add PUPI_Settings, click on added BP_PUPI_Component and change properties in Details Panel -> Properties)


Template VirtualReality implementation (UE4.18+):[spoiler]

  1. Open BP_MotionController [located in VirtualRealityBP->Blueprints], add a BP_PUPI_Component


Select **BP_****PUPI_Component** and change its properties in **Details Panel** as below:


Main Settings:
_Tracer: PUPI
_SphereTrace****Radius: 10 (or decide for your project)
_MaxGrabDistance: 0.001 (or decide for your project)

Pick Up** Settings**:
__RollRelativeTo: PUPI
__Vertical: PUPI
__Horizontal: PUPI

Change rest of the settings based on your project
  1. Open ConstructionScript and make this addition
  2. Select BP_PUPI_Component, in Details Panel scroll down and add On Start Interaction and On End Interaction events by clicking green + icon. And connect **Grab **and Release functions to them.
  3. In Event Graph, inside Update animation of Hand comment box make these additions
  4. Open Grab Actor function from My Blueprint > Functions > Grabbing and make these additions
  5. Open Release Actor function from My Blueprint > Functions > Grabbing and make these additions


Template VirtualReality implementation:[spoiler]

  1. Open BP_MotionController [located in VirtualRealityBP->Blueprints],
    add a Child Actor Component attached to MotionController, rename it to PUPI_ChildComponent,
    add a PUPISettings component
Set **PUPI_ChildComponent**'s class to **PUPI** in Details Panel,
Select **PUPISettings** and change its properties in Details Panel as below:

PUPI Child Actor Name: PUPI_ChildComponent

Main Settings:
_Tracer: PUPI
_SphereTrace****Radius: 10 (or decide for your project)
_MaxGrabDistance: 0.001 (or decide for your project)

Pick Up** Settings**:
__RollRelativeTo: PUPI
__Vertical: PUPI
__Horizontal: PUPI

Change rest of the settings based on your project

  1. Open ConstructionScript and make this addition
  2. Create a new Variable type of PUPI and in EventGraph (Event BeginPlay) make these additions
  3. In Event Graph, inside Update animation of Hand comment box make these additions
  4. Open Grab Actor function from My Blueprint > Functions > Grabbing and make these additions
  5. Open Release Actor function from My Blueprint > Functions > Grabbing and make these additions


PUPISettings Component (not needed for update 3 (UE4.18+)):[spoiler]

  1. Add PUPISettings Component to the Actor you have added PUPI
  2. Write name of PUPI into PUPI Child Actor Name field of PUPISettings Component
  3. Configure settings


Video Guide:

Settings: [spoiler]

  • Tracer:
    1. Camera(trace from camera towards camera forward vector),
    2. PUPI(trace from placed PUPI towards PUPI forward vector),
    3. Mouse Pointer(use mouse pointer to interact)
  • SphereTraceRadius: radius of trace.
  • MaxGrabDistance: maximum distance which player can interact with object. Picked up objects will be dropped if distance between player(PUPI) and object exceeds this value.
  • MaxGrabAngle: maximum angle which player can interact with object. Picked up objects will be dropped if angle between player(PUPI) and object exceeds this value.
  • OutlineColor: color of outline.
  • OutlineThickness: thickness of outline. Settings this too much will make outline cover whole object.
  • OutlineBehindObjects: visibility of part of outline which is behind objects. 1 is same as OutlineColor, 0 disable outline, negative values to make hidden part of outline in negative, settings this to a bigger value than 1 will make hidden part of ouline glow brighter than visible part :stuck_out_tongue:
  • AllowDiagonalRotation: prevent or allow object to be rotated in diagonal rotation(pitch and yaw at the same time).
  • AlwaysActiveMappings: to rotate, move or scale object Mode keys must be held down. If any of the mappings are set to true, there is no need to hold mode key for that action. Example: if RotatePitch and RotateYaw are true, can rotate object with “Q” and “E” keys, without the need of holding mode keys .


  • MaxCarryWeight: Objects heavier than this can’t be picked up. Doesn’t affect Inspecting.
  • MaxThrowForce: Objects can be thrown further by setting this value higher.
  • PickUp\Drop:
    1. Press/Release - press key to pick up and release it to drop object,
    2. Press/Press - press key to pick up and press it again to drop object.
  • PickUpSound: custom sound to play when object is picked up.
  • OrbitalObjectMovement:
    1. “attach” object to Camera. Object will be moved with camera rotation,
    2. “attach” object to PUPI. Object will be moved with PUPI rotation (if PUPI is attached to root of character, object will be move when character rotates even if camera is standing still)
    3. Lock objects orbital movement. Object will stand in same angle to PUPI as it was first picked up.
      Take a look at Guide video 2:00
  • AllowObjectRotation: enable/disable local pitch or yaw while object is orbiting. Guide video 2:22
  • WeightAffectsMotion: If true, object’s rotation and move speed and throw distance will be affected by it’s weight and MaxCarry weight.
  • StartingPosition: if set to true, object will get to custom location relative to PUPI, set in settings.
  • CollideWithPawn: If false, picked up object won’t have collision with player Pawn.
  • MakeObjectUnwalkable: If false, player will be able to get on object, pick it up and fly. If false, player will fall of object when on attempt to fly on object.


  • InspectDistance: at what distance should objects be inspected.
  • EaseMethod:
  • Step: Number of steps required to go from A to B. Used with Step method only.
  • BlendExponent: Blend exponent for basic ease function. Used with Ease methods only.
  • AnimationSpeed: Speed of ease animation.
  • ScaleDownExtent: if object’s lenght, width or height exceeds this value it will be scaled down to this value.
    Tip: by settings InspectDistance and ScaleDownExtent to small values you can make inspectable appear closer than anything else in scene :slight_smile:
  • InspectSound: custom sound to play when inspect starts
  • SlowTime: slow down time while inspecting. Note: might make physics behave strange.
  • RotateAlwaysActive: just like AlwaysActiveMappings, if this is set to true, there is no need to hold RotateMode key to rotate object while inspecting it.
  • CanRotateObejct: if it should be possible to rotate object while inspecting.
  • CanMoveObject: if it should be possible to move object while inspecting.
  • CanChangeDistance: if it should be possible to move object(further/closer) object while inspecting.


Input Mappings: [spoiler]
Action Mappings

  • [PUPI]Pick Up/Inspect
  • [PUPI]Rotate mode
  • [PUPI]Move mode
  • [PUPI]Scale mode
  • [PUPI]Throw
  • [PUPI]Reset Rotation
  • [PUPI_MC_R]Pick Up
  • [PUPI_MC_L]Pick Up

Axis Mappings

  • [PUPI]ScaleLength
  • [PUPI]ScaleWidth
  • [PUPI]ScaleHeight
  • [PUPI]MoveRight/Left
  • [PUPI]MoveUp/Down
  • [PUPI]MoveForward/Backward
  • [PUPI]RotatePitch
  • [PUPI]RotateYaw
  • [PUPI]ConsumeWhileInspecting


About demo level: The project comes with 7 types of demo characters in it: 1st person, 3rd(or 2nd) person shooter type, 3rd person free camera, Top down(with mouse pointer), Fixed cameras(like old resident evil series but with mouse pointer), VR headset with keyboard and mouse, VR headset with motion controllers. These characters can be found in Demo->Character. Drag/drop one of them at a time into level to try.
You can start playing in demo level and press “B” to bring up demo menu and change settings on top right. To have correct camera height in VR please put on headset in correct position(seated) before pressing play for VR keyboard mouse; put headset on floor before pressing play for motion controllers.

Thanks to everyone who liked, asked questions and gave suggestions!
Special thanks to tcla75 for helping out with VR!

At some point, it reminds me the gravity gun :wink: For sure it will be useful for some people, gg :wink:

Yeah it is almost same as gravity gun. Main difference is gravity gun would bring grabbed object to a certain distance. And thanks. We do hope it will be useful to some people :slight_smile:

Its almost good. But do you destroy the main player and limit the developer that buys this to the character you choose?
Like “i have a nice character setup and i want to expand it with this, but i dont want this to be extrem hard to integrate and override my character setup.”

Do a proper tutorial on how to integrate this with first or third person so we can see how it works.

This blueprint doesn’t need any integration at all. We did our best to make it as user friendly as possible. So everything it needs is included in 3 blueprint actors (detecting object, picking it up, receiving input, interacting with picked up object). To use this BP you only need to drop one actor as shown in the video and you are ready to go. You can use it with any character BP actor which is 1st person. Also there are few things I should have included in the post, but couldn’t think of it at that time… I apologize for that, and I’ll update post right know. Those things are:
If for some reason your player character is not at index 0, you’ll only need to input correct index for your character in “Get Player Character” node in BP (On second thought, that will be added to settings structure as well).
Grab distance is calculated from camera, meaning this can’t be used with third person (We’ll think of a way to make it work with 3rd person as well).

I think that is all :slight_smile: Thanks for reminding those.

I use in my project 3rd person, but with “real first person effect” , I place main camera in head of 3rd person.

I want to buy your pick-up system, but would it work for my project ? Could you try to test it with project with “real first person effect” ?


We tested it and it works. If you have more questions feel free to ask here or via support email.


would it work in a point & click adventure system with multiple fixed/moving cameras ?
very interested in this !

Unfortunately, in current state it is not working correctly with non 1st person projects. The reason is:
Picked up objects orbit around camera. If camera is placed somewhere away from character’s head, when you move mouse(rotate camera) object will not rotate around character but around camera which is in sky -probably :). Also when character walks, object will not move with it because object is aligned relative to camera.
Of course everything can be edited to your own taste but just to let you know, we tried once to make it work with 3rd person camera and we had to change many things in blueprint and decided to keep it like this for now. We might make it work with non 1st person projects as well in future.

We are happy you found this interesting :slight_smile:

Hi Nicat this is a great blueprint. Its so easy to set up in game which is great also. Just one thing I’m trying to figure out and I’m not sure how I can get past it. I have items in a glass box that I am trying to get the character to lift up out of the box. I am using a simple actor bp with a cube static mesh with a glass material. The only problem is that even though the player can see the items in the glass box he is trying to grap your BP can only do a line trace on the glass box and is not able to move the objects inside. Is there any way around this?

You can set “Collision Preset” of Glassbox to “InvisibleWall” or “InvisibleWallDynamic” in the details panel under Collision tab. This will make Glassbox to ignore all “Visibility Channel” traces.
Hope this helps.
And thanks! :slight_smile:

Thats perfect Nicat I’ll try that when I get home. Now all I have to figure out is how to play a sound when I grab something but I’ll play around in the blueprints to find that out.

Check your PM :wink:

Is there any chance that you are going to clean up the blueprints and comment them better, or provide documentation? I looked over the project and it is confusing how everything works. I like to buy assets like this to learn from them, but at times it can be hard.

An update with new features, cleaner BP and somehow better comments is coming soon. Currently working on comments. Btw what is meant by documentation in the marketplace? Is it “how to use” or “how it works”, is it enough to have comments or do I need to make a PDF or something? I should have asked it before but forgot to do so. Sorry about that.

Hi Nicat still loving the PUPO. Everything is working so far and its so easy to set up just drag the bp onto your map and you are done. Right now I’m making a game for the Oculus rift and being able to move objects around by moving your head is great but I’ll be getting a HTC vive in the summer and I wonder how hard will it be to set this up with the Vives handheld controllers and turn off being able to move the objects by moving your head?

Hello, glad to see PUPO is being loved by many people :slight_smile: It is a BIG motivation for us to improve PUPO even more, which is being done currently. We’ll upload a demo build of it in 0-2 days.

About VR headset and controllers, with new version you’ll be able to Trace using Camera[SUP]1[/SUP], PUPOStarter[SUP]2[/SUP] or MousePointer[SUP]3[/SUP]. Also move(orbit) object by Camera or PUPOStarter[SUP]2[/SUP].

[SUP][1][/SUP]: Can be used for First/Second/Third/… person games.
[SUP][2][/SUP]: You can add two or more PUPOStarters, each PUPOStarter can be controlled by VR controller -hopefully-[SUP]4[/SUP]. Also by choosing move(orbit) object by PUPOStarter, you can move(orbit) object by moving/rotating PUPOStarter and freely move/rotate Camera.
[SUP][3][/SUP]: This can be used for games with fixed or top down camera.
[SUP][4][/SUP]: Unfortunately we don’t have any VR devices therefore we can’t make sure it’ll work as intended or how much work must be done to make it work(we’ll try to make it as simple as possible). But we’ll get a Vive as soon as we can and make sure it works :slight_smile:


Cool thanks for replying. It will be June at the earliest before I get my Vive so hopefully you will have yours before then :slight_smile:

I hope so :smiley:

(Outdated) Demo of upcoming update


We have been working on an update and made a small demo build with 6 game types to show new features and what game types will be supported with this update (3rd person, top down etc…), current version of PUPO can be used with First person projects only. Also many new features/settings have been added like: configurable outline color, playing custom sound on inspect/pick up, configurable scaling of inspectables to fit the screen, support for UE4.9 and a few more things…

Here is link to the demo: PUPO - Google Drive (outdated)

Press “Esc” or “B” to bring up menu. On top left corner game type can be chosen, on top right corner all of the settings of PUPO can be configured (tried to make it look like actual Settings Structure of PUPO) except for Sound setting -it can be changed in Editor but it was a bit of work to make it work with UI in real-time, so Sound Setting is greyed out in demo :slight_smile: . Inputs cannot be changed in demo but it can be changed using InputMappings in Project Settings in Editor.

Update is ready, after clearing, commenting blueprints and making new video we’ll send it to Epic.

And thanks to everyone who bought/rated/gave feedback. This update is the result of the motivation from the community :rolleyes: