Particle emitter rotates when welded to moving character


video as refrence, the slash works fine standing still, or as its own part not welded to the character’s humanoid root part. I am not sure what is causing it, can anyone help?

1 Like

Would disabling LockedToPart work for you?

Yeah it would, but I would need it to constantly be at the player’s location so that isnt an option. I’ve tried teleporting the part to the player, but it cant keep up.

How do you teleport them?
Do you handle the effect on the client or server?

I handle it on the server, i teleport them by changing the CFrame of the part with the slash particle to the player’s CFrame with renderStepped.

You should on renderStepped change it on the client; it’ll look smoother

what part is the particle emitter welded to? the humanoid root part should stay still and not rotate with any animations, as i’m sure that the running animation has something to do with it

I want it to be smooth on the server as well though.

Welded to the humanoid root part.

Teleport it to CFrame.new(Player’s position) so that it has no orientation

Currently, its welded to the player so I am not using CFrame, but in the past i have used the players position as CFrame.
The problem I have with teleporting the part to the player is that its too slow (player walkspeed is 65) to catch up, so I’m not using it.

It’s probably the player rotating when moving around

Any time you want to do a visual effect, you should do it on the client. It’s smooth and more network efficient. Just set up a script that tells players when to display that effect onto a player’s character and when to stop, and have a LocalScript just update the position of the part every frame. (I assume this is what you mean by it being smooth on the server, i.e. smooth for every player)

Example client code:

local effectRemote = game.ReplicatedStorage.EffectRemote
local effectPart = game.ReplicatedStorage.EffectPart

local effectParts = {}

effectRemote.OnClientEvent:Connect(function(player: Player, shouldDisable: boolean)
    if (not shouldDisable) then
        local part = effectPart:Clone()
        part.Parent = workspace
        effectParts[player] = part
        while (part.Parent) do
            part.Position = character.HumanoidRootPart.Position
            task.wait()
        end
    else
        effectParts[player]:Destroy()
    end
end)

Example server code:

local effectRemote = game.ReplicatedStorage.EffectRemote

-- Call this function on a player to display effect on them, pass nothing for arg #2 to display it, and true to disable it.
local function setEffect(targetPlayer: Player, shouldDisable: boolean)
    effectRemote:FireAllClients(targetPlayer, shouldDisable)
end

Looks promising, thanks! Will try it out and see how it goes.

Did this work?
If it didn’t, I believe you can just set the SpreadAngle of the particle emitter to a small number, greater than zero, which should fix it.