Circle moving according to a part

I wanna be able to create an indicator circle like this one:


im sorry for the lag, obs couldnt record with all the apps i had open
(the game is volleyball legends, i didnt really have a better example)

I’ve tried creating a surface gui on a part and the surface gui should position itself below the ball but i frankly dont know how i would be able to transfer a world position to a gui position

image

You can use a Raycast fired down from the Position of that ball to determine where the Circle will be. Basically something like this:

local Ball
local Circle

local Params = RaycastParams.new()
Params.FilterType = Enum.RaycastFilterType.Exclude
Params.FilterDescendantsInstances = {} --Add where you dont want the circle to be in this table

game:GetService("RunService").Heartbeat:Connect(function(dt)
	local RayC = workspace:Raycast(Ball.Position,Vector3.new(0,-10000,0),Params)
	if RayC then
		Circle.Position = RayC.Position
		--Show the Circle via your script
	else
		--Hide the Circle via your script
	end
end)

send a raycast from down from the ball, then set the indicators position to its x and z position, and set its size on its Y and Z axis to the distance with an addition or multiplier

smtn like this could be put down when you receive a raycast result

indicator.Position = Vector3.new(Ray.Position.X, [y position], Ray.Position.Z)

local SizeSet = 6+(Ray.Distance/2)

indicator.Size = Vector3.new(0, SizeSet, SizeSet)

the 6 makes sure it doesnt get any smaller than 6 studs. the Y and Z scale is presuming you are using a cylinder. but if you are using a cube, swap the X and Y values in the size setting


not to mention you could also put a gui on that part, and move the part instead of the gui