Bit of a newbie question here. I am developing a VR experience on Quest. I have an electric screwdriver which actives on a button press from the VR controller. However, currently the button press activates the screwdriver whether the screwdriver (blueprint) is held of not. Obviously I need it to only happen when the screwdriver is picked up with the ‘grabcomponent’ command.
I have successfully created a variable attached to the grab controller logic, so it knows when any object is picked up or not, but I need to link this variable specifically to instances where only the screwdriver is picked up. I just need pointing in the right direction to achieve this?
Any help would be appreciated. I tried getting actors of class ‘screwdriver blueprint’ before setting the is it held variable, but this didn’t seem to work, so not sure what next to try?
Many thanks for the response, could you possibly add a bit more context? As I don’t fully understand what you mean…
Currently my button event is in the VR Pawn, the button triggers a rotation of the screwdrivers chuck and plays a sound, and them stops the rotation and plays another sound on release.
Are you suggesting I create a different event in the VR Pawn with some kind of override variable which I access from the screwdriver blueprint?, or what type of event would this be?
I’ve managed to get something working; in the end I created a variable for when the screwdriver is picked up, to say I am a screwdriver, then I did two checks on the button event to ask, is an object is picked up? and if so it is is it a screwdriver?
Maybe not the best way of doing things, but it seems to work!
No, I’m say that you should have an Actor Class as parent and then create child classes of it for items having similar properties.
e.g.
Weapon class (parent) … all firing, reloading, toggling fire mode logic is in the parent.
Wep_AK47 would be a child class of Weapon. I don’t have to rewrite firing, reloading, toggling etc. It’s inherited from the parent.
The twist … Say I have three firing modes in the parent class. Auto, Burst, Semi-Auto. The AK might only need two. So in the AK class there will be an event “Burst Fire”. I’ll overwrite that event…pipe a branch node to it. Now no matter what anyone does (e.g. cheats) that weapon will never burst fire.
Same for a screwdriver, hammer, shovel. Parent has one event with no code logic applied to it. Say “Action”. In each of these classes I would Override the parent “Action” event and code up the specific logic for the child item.
If you need an example I’ll script one up real quick.
I have it working but I’d like to understand more what you mean…
I think I follow. So in this case, the parent class might be ‘tool’ BP? then the child will be ‘screwdriver’ BP or ‘spanner’ BP etc? Are the children derived from the Parent of tool BP?
Would the VR Pawn then reference the ‘tool’ action and the override reside within the specific tool, i.e. screwdriver/spanner?
BP_Tool → BP_Screwdriver (Tool)
“Action event” in Tool class → Overridden in screwdriver
If setup correctly you only need to have a BP_Tool obj reference to store any tool. So no down casting needed to use BP_screwdriver. just a simple BP_Tool → Action event call.
I would create a socket on the controller and when you grab the screw driver parent the screw driver to the socket. Then when you press you interaction button, check if the child of the socket is = to the screwdriver, if it is then cast to the screw driver (or bp interface to it) to run the code on the screwdriver bp. Then when you let go of the screwdriver, I parent it from the socket.