I have a function that does an afterimage effect, which instances new parts all named "Afterimage" which are the exact same size of each of the player's limbs. However, when im trying to use a while true loop in order to add transparency to the afterimage it adds transparency to only one part named Afterimage. So I was wondering if there is a way to union parts using UnionAsync on parts of the same name? The code concerned with is from lines 73 - 83

local rs = game:GetService("ReplicatedStorage")
local dash = rs:WaitForChild("Dash")
local TweenService = game:GetService("TweenService")

dash.OnServerEvent:Connect(function(player)
	local model = Instance.new("Model")
	model:Clone()
	model.Name = "WaveAndAfter"
	model.Parent = game.workspace
	
	local char = player.Character or player.CharacterAdded:Wait()
	
	local wave = script.Mesh:WaitForChild("Wave"):Clone() or script.Mesh:FindFirstChild("Wave"):Clone()
	wave.CFrame = char:WaitForChild("HumanoidRootPart").CFrame * CFrame.new(0, -3, 0)
	wave.Orientation = wave.Orientation + Vector3.new(-90, 0, 0)
	wave.Parent = model
	
	local fx = script["Electricity Shock Sound Effect"]:Clone()
	fx.Parent = wave
	fx:Play()
	
	local bolt1 = script.Folder:WaitForChild("Bolts2"):Clone() or script.Folder:FindFirstChild("Bolts2"):Clone()
	bolt1.Parent = wave
	
	local bolt2 = script.Folder:WaitForChild("Bolts3"):Clone() or script.Folder:FindFirstChild("Bolts3"):Clone()
	bolt2.Parent = wave
	
	local goal = {}
	goal.Size = wave.Size + Vector3.new(10,10,1)
	goal.Orientation = wave.Orientation + Vector3.new(0, 3600)
	goal.Transparency = 1
	local info = TweenInfo.new(2)
	local tween = TweenService:Create(wave,info,goal)
	tween:Play()
	
	for count, objectsInCharacter in ipairs(char:GetChildren()) do
		local afterimage = {}
		local head = {}
		if objectsInCharacter:IsA("MeshPart") or objectsInCharacter:IsA("Part") then
			if objectsInCharacter.Name ~= "HumanoidRootPart" and objectsInCharacter.Name ~= "Wave" and objectsInCharacter.Name ~= "Head" then
				afterimage = Instance.new("Part")
				afterimage.Size = objectsInCharacter.Size
				afterimage.Name = "Afterimage"
				afterimage:ClearAllChildren()
				afterimage.Transparency = 0.8
				afterimage.Color = Color3.fromRGB(10, 105, 220)
				afterimage.Material = "Glass"
				afterimage.CanCollide = false
				afterimage.Anchored = true
				afterimage.Massless = true
				afterimage.CFrame = objectsInCharacter.CFrame
				afterimage.Parent = game.Workspace
				
			elseif objectsInCharacter.Name == "Head" then
				head = script.Mesh.Head:Clone()
				head.Name = "AfterimageHead"
				head.Transparency = 0.8
				head.Color = Color3.fromRGB(10, 105, 220)
				head.Material = "Glass"
				head.Anchored = true
				head.CanCollide = false
				head.Massless = true
				head.CFrame = char.Head.CFrame
				head.Parent = game.Workspace
			end
		end
	end
	
	wait(0.3)
	local parts = game.Workspace:GetChildren()
	
	--this was my attempt to change the transparency of all parts. I found that if i used a while true loop it would still only affect one part instead of every part, so i decided to this. however, its still not the intended effect because it scans for one part, plays the for loop, then goes onto the next part.
	for i = 1, #parts do
		if parts[i].Name == "Afterimage" then
			parts[i].Transparency = parts[i].Transparency + 0.1
			wait(0.1)
			parts[i].Transparency = parts[i].Transparency + 0.1
			wait(0.1)
			parts[i].Transparency = parts[i].Transparency + 0.1
			wait(0.1)
			parts[i].Transparency = parts[i].Transparency + 0.1
		end
	end
	
	wait(2)

	bolt1:Destroy()
	bolt2:Destroy()
	
end)