the title explains it lol
✓ ANSWER ACCEPTED
How do I get the Vector2 distance from the mouse to a part?
1 answer
✓ Accepted answer
You can use :WorldToScreenPoint to get Vector2 position from Vector3, then you get the distance between that and :GetMouseLocation, this is your result.
-- StarterPlayerScripts.LocalScript
local UserInputService = game:GetService("UserInputService")
local Workspace = game:GetService("Workspace")
local part = Workspace:WaitForChild("Part")
while task.wait(0.1) do
local mouse_location = UserInputService:GetMouseLocation()
local part_location = Workspace.CurrentCamera:WorldToViewportPoint(part.Position)
local distance = (mouse_location - Vector2.new(part_location.X, part_location.Y)).Magnitude
print(distance)
end
When you write (A - B).Magnitude, you get the distance between A and B, however, in this case there is a small issue that mouse_location is Vector2 and part_location is Vector3, Vector2.new(part_location.X, part_location.Y) converts the Vector3 to Vector2, because otherwise we couldn't write A - B (Can't subtract Vector2 with Vector3).
Here is an example code that makes the part more red the closer you move your cursor towards it:
-- StarterPlayerScripts.LocalScript
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local part = Workspace:WaitForChild("Part")
RunService.Heartbeat:Connect(function()
local mouse_location = UserInputService:GetMouseLocation()
local part_location = Workspace.CurrentCamera:WorldToViewportPoint(part.Position)
local distance = (mouse_location - Vector2.new(part_location.X, part_location.Y)).Magnitude
part.Color = Color3.new(1 - math.min(100, distance) / 100, 0, 0)
end)
This discussion is preserved as it was. New answers, comments, and votes are closed.
