I want a boolean to see if a player is standing on a part. What would that be? Like is there a function that returns a bool or something?
use a parts .touched event and add it to a table for debounce and when the .touchEnded event fires remove said player from table
Doesn’t seem to be working, as I’m standing on the NPC’s head and it’s saying it’s false:
I’d just fire a raycast downwards. You can also use the touched events like Decablocks was saying, though I don’t think those aren’t super reliable.
It might be a problem with your code.
Simply either use .Touched
events, or use part:GetTouchingParts()
and see if it is a descendant of a player.
https://developer.roblox.com/en-us/api-reference/function/BasePart/GetTouchingParts
BasePart:GetTouchingParts
has been superseded by Workspace:GetPartsInPart
https://developer.roblox.com/en-us/api-reference/function/BasePart/GetTouchingParts
Not yet, you’re likely thinking of Region3 functions.
“Additionally,
WorldRoot:GetPartsInPart
can be used in place ofPart:GetTouchingParts
, and is a better choice most of the time.”
I did not say that BasePart:GetTouchingParts
is deprecated. As this post states, there “are a few niche cases” that is preventing the follow through.
No explicit mention of it being superseded either, I’ll wait for the official documentation to state as such.
What’s the difference between them? Is one more accurate/reliable?
One will fire a signal whenever the touch begins. This is useful for detecting everytime there is a touch at the moment it happens.
The second one checks if they are touching or not, and does not fire any signal as soon as it happens.
Using Touched and TouchEnded works, just not super reliability. The code can be written to account for the majority of this though, so because your code doesn’t work I assume that the code doesn’t do that and therefore has a problem.
For the use case you gave you should use GetTouchingParts over Touch and TouchEnded anyways.
The Touched event fires when a part touches the given part. GetTouchingParts gets the parts currently touching a given part.
The biggest problem with checking if a player is standing on another part with these methods is that the legs don’t always touch the ground when they should. The best way to do this would be to have a hitbox part or use raycasting.
If you just need to get if the character is touching another part, you should use GetTouchingParts either on the non-character part or on both the feet.
If you need to get when the character touches a part, use Touched.
If you need very precise error free checking, use raycasting. Note that unless you use multiple raycasts the raycast will only check directly downwards.
Another solution for basically error free checking is a hitbox part (below the feet positioned relative to the root part) and using GetTouchingParts. This solves a lot of the problems with other solutions. Note if you weld it to the character to make it massless and non-collide.