This is really neat! It takes something rather difficult to do and gives a really simple “in” for developers who wouldn’t know how to do it otherwise. And a huge time-saver for people who know how to do it but don’t want to make a system from scratch.
1: In cases in which there are multiple prompts near each other that all take the same input when exclusivity is Global or OnePerButton, how are the prompts prioritized? Does it consider cursor position/camera angle or is it arbitrary?
2: In my custom prompt system, I have a context based priority system, where potentially more relevant prompts can be prioritized. For example, if I’m holding an ore, I prioritize the prompts to add the ore to a furnace at a higher priority than the prompt to close the furnace door or other random prompts that might be nearby. I don’t want the other prompts to be disabled; I just want them to not appear if a high priority prompt is nearby. Will a similar priority system be implemented for this feature?
I believe that it’s only in-Studio for the time being because we have to opt-into the Beta Feature in order to use it. I’m fairly certain that anything that requires us to opt-in will be Studio-only until that process is no longer required.
Also @crypto_mancer, the deprecated versions of :Connect() are being used in the example code blocks – I wanted to bring it up just in case that wasn’t intentional.
It updates at your current framerate. The task scheduler is not used currently.
By default, it uses the PrimaryPart of the local player’s Character, which by default is the HumanoidRootPart. If no character exists, it uses the camera’s focus position
You can use the camera’s focus position if player.Character is nil. You can also set the player’s character to a non-humanoid model, in which case the PrimaryPart’s position will be used for proximity prompts.
Am I able to customize how and what get’s shown? Like if I wanted a certain image shown instead of some generic text. Anyway, seems cool but lacks a lot of versatility. EDIT: When I say “how” , I mean if I can specify tweens and such along with it.
Any ETA on when this will be live for use in production? I absolutely went crazy reading this, since in a project of mine I want this behavior, luckily I won’t have to code it myself. Literally thank you.
Awesome update, Roblox! I actually am in need of this for my upcoming game. It’s great to know Roblox is actively working on cool updates that can free up time from simpler tasks to spend on harder tasks.
Thanks for answering; glad it doesn’t use the task scheduler.
I have a few more questions if that’s fine, one of them being missed because I edited it into my post afterwards (sorry about that)
Wouldn’t RequiresLineOfSight still allow for situations where the character can interact with something through a wall if Invisicam is being used? If so, would there be any way to prevent that in the future?
Looking at the API, it looks like this can also used on the server. Is there any kind of protection aginast exploiters if used on the server (for example, can an exploiter activate buttons without being near them or activate buttons that are required to be held down instantly) or do we have to implement that ourselves?
This should work fine - if a wall is transparent because invisicam is used, the player will still not be able to interact with a ProximityPrompt through that wall. It may be possible for the player to angle the camera in a way to attempt to interact with objects behind a wall in certain camera modes. We have tried hard to make this feel right.
There is a server-side check to make sure the player is near the prompt to avoid this sort of exploit. For the HoldDuration feature, it is possible for a hacker to overcome this as the animation happens client-side. If your game’s security relies on HoldDuration, you will need to send events to the server on hold start/end to verify the timing.
This looks really convenient! Is there any plans for more extensive prompts? for example, I might want to press E to bring up a prompt that then allows me to chose multiple options, such as repairing or removing a tire from a car.