Hello there! I wanna make crowding out this box:
I tried to use raycast, maybe I’ve done something incorrectly.
A part of the code:
explosionBox.CFrame = CFrame.new(m.Hit.Position)
This is a local script. This function used in while cycle.
Hello there! I wanna make crowding out this box:
I tried to use raycast, maybe I’ve done something incorrectly.
A part of the code:
explosionBox.CFrame = CFrame.new(m.Hit.Position)
This is a local script. This function used in while cycle.
Can you explain what crowding out is, or link some source explaining it?
Maybe something like this would work?
The change i would make is only getting the direction for one axis at a time
local part = script.Parent
local function move(to : Vector3)
	local params = RaycastParams.new()
	params.FilterType = Enum.RaycastFilterType.Exclude
	params.FilterDescendantsInstances = {part}
	
	local current = part.Position
	local direction = to - current
	
	local ray = workspace:Blockcast(part.CFrame, part.Size, direction, params)
	if (ray) then
		part.Position += direction.Unit * ray.Distance
	end
end
move(Vector3.new(-9, 3, 0))
these are the results i got
not moved (red cube is -9, 3, 0)

moved


The reason I suggest doing one direction at a time, in this example i moved it to (-10, 5, 0) and the results aren’t as good

local function move(to : Vector3)
	local params = RaycastParams.new()
	params.FilterType = Enum.RaycastFilterType.Exclude
	params.FilterDescendantsInstances = {part}
	
	local current = part.Position
	
	local directions = {
		Vector3.xAxis * (to.X - current.X),
		Vector3.yAxis * (to.Y - current.Y),
		Vector3.zAxis * (to.Z - current.Z),
	}
	
	for _, direction in next, directions do
		local ray = workspace:Blockcast(part.CFrame, part.Size, direction, params)
		if (ray) then
			part.Position += direction.Unit * ray.Distance
		end
	end
end
move(Vector3.new(-10, 5, 0))
here are the results for doing the directions one at a time going to (-10, 5, 0)

umm, idk how to correctly use this in my script:
explosionBox = explosionFolder.Box:Clone()
explosionBox.Parent = workspace
explosion_boxFunction = task.spawn(function()
	while wait() do
		if (explosionBox.Position-HRP.Position).Magnitude>200 then
			explosionBox.Color = Color3.fromRGB(74, 36, 24)
			canSpawnExplosion = false
		else
			explosionBox.Color = Color3.fromRGB(186, 91, 60)
			canSpawnExplosion = true
		end
		explosionBox.CFrame = CFrame.new(m.Hit.Position)
		spawnPosition = explosionBox.CFrame.Position
	end
end)
ohoh, wait, lemme try smth, i got it
I did forget to add else to the for loop, so it only moves if the ray hits something. But trying it myself in a mouse position loop it seems to only work in very certain conditions. A different solution i was thinking of is to move it, then block cast all sides and use the normal of the ray to offset it, might work?
idk what do I need to say. Just… Try it? idk
I’ve been trying for a little bit now but I’m struggling to come up with something. I think you should be going for something like blockcasting and using the ray’s normal. I’ll continue trying tomorrow if you haven’t already solved it by then
hey, can you help me?
6yhj5yhjrgthjrtyhdthgr
Do you have CanQuery turned off for the red part? If you have this on that may be the cause to it being so snappy.
not helped(
ehbklekrtghjierhjioerhjkejirthjeiklrthgjiethijethji
nvm, I just made a new method to spawn explosion. Anyways thx guys
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.