So I've taken up learning the ContextActionService. The best place to start seemed to be a door. While the script I have works fine, it feels inefficient. The idea of having to keep hundreds of doors stored in a folder and checking each individual one in a for loop seems like a bad solution to make this work. I was thinking of having the action be bound an unbound to open one specific door if the player came within a radius of it but I'm not entirely sure how to accomplish this.
Two methods I know would work are:
An invisible part with a Touched event
A while loop checking if the player is within a certain radius
Both options though seem very unappealing. Touched is a mess a lot of the time and I really don't like the idea of having a constant loop going that's constantly running checks given how common things like doors can be in maps. I've heard of using a Changed event but from what I've tested, Changed will not fire for player movement and neither will GetPropertyChangedSignal.
So what IS the best possible means of accomplishing something like this?

3 comments
Have you tried Region3? You can make it like this: If player is in radius, print "Player in radius". You can check the information about Region3 on developer hub or youtube.
Yes I have considered region3 but from the information I've gathered on it a simple magnitude check seems more efficient.
Region3 is also quite slow - slower than just magnitude checks, at least.