Set Image canvas starting from Character:Pivot() to the ground

My image system works by getting a canvas, cloning it, parenting it and positioning it to the characters pivot and sizing it based on the X and Y inputs you give it.

The problem (and what im trying to achieve) is that the position of the canvas is always set to the ground/players feet. Instead it’ll set itself AT the pivot, However I haven’t found a good solution to combat this and the results end up making the image float

When i divide the position by 2 the smaller it is it works better but the bigger it is it works worse. I’ve been fidgeting around with this system for a day or 2 and cannot figure out a solution that won’t end up being a double edged sword in the future

(The image is slightly opaque so you can see what i mean by it floating)

image

-- For now this is how the positioning of the cframe is used and what i've left off with
canvas.CFrame = character:GetPivot() * CFrame.new(0,-2+(Yvalue/2),0)

Wnen you :GetPivot it uses the models bounding box which may increase if the player is wearing a hat etc. You can try using the root part pos instead.

Tried using the root part itself, haven’t gotten any changing results, i’ve broken it down into a function so it can maybe be more identifiable

local function setCanvas()
			newWeld.Part0 = canvas
			newWeld.Part1 = rootPart
			newWeld.Parent = character
			
			canvas.Size = Vector3.new(Xvalue, Yvalue, 0.001)
			
			canvas.Parent = character
			canvas.CFrame = rootPart.CFrame * CFrame.new(0, -Yvalue/2, 0)
			canvas.Front.canvaImage.Image = ID
			canvas.Back.canvaImage.Image = ID
			canvas.Anchored = false
			canvas.Massless = true
			
			for _,xi in pairs(character:GetDescendants()) do
				if xi:IsA("Accessory") then
					xi:Destroy()
				elseif xi:IsA("Part") or xi:IsA("BasePart") or xi:IsA("MeshPart") then
					xi.Transparency = 1
				elseif xi:IsA("Decal") or xi:IsA("Texture") then
					xi.Transparency = 1
				end
			end
		end