Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

How does one alter the Axis' on a VectorForce's Attachment?

I'm trying to create a lunge/dodge through a VectorForce. I've already written a script that places a VectorForce + Attachment into the player's LowerTorso Whenever I alter the axis(es?) on the attachment, it gives me this error: "X cannot be assigned to". My guess is that it means that you can't alter the attachment through a script. Is there any other way one could go about altering the axis?

		local playerV = Instance.new "VectorForce" -- Creating the vectorForce
		local playerA = Instance.new "Attachment"

		playerV.Parent = Ltorso -- Parenting the vectorForce
		playerA.Parent = Ltorso
	
		playerV.Attachment0 = playerA -- Attributes for the vectorForce
	
		playerA.Axis.X = 0 -- Attributes for the attachment
		playerA.Axis.Y = 0
		playerA.Axis.Z = -1
		playerA.SecondaryAxis.X = 0
		playerA.SecondaryAxis.Y = 1
		playerA.SecondaryAxis.Z = 0

1 answer

✓ Accepted answer

The error is pretty self-explanatory: you cannot directly manipulate a vector's particular component. For this, you would want to construct a new vector3 with the desired component values:

playerA.Axis = Vector3.new(0, 0, -1)

However, it would be better if you just rotated the attachment using the Attachment's CFrame property, or its WorldCFrame property, because the attachment's CFrame property is relative to its parent's local space, basically it is relative to its cframe; however, WorldCFrame is not relative to the attachment's parent's cframe, but rather, the world space.

For example, the desired rotation you want can be achieved by doing:

playerA.CFrame = CFrame.Angles(0, math.pi/2, 0)
-- math.pi/2 is the amount of radians equivalent to 90 degrees 
-- you could convert your value in degrees to radians using math.rad(deg)

However, the best way to achieve what you want to achieve is by making the force relative to the world, then calculating the direction you want to move in. For example, if you want a force exerted on the player that has a magnitude of 2 in the direction their right side is looking, then you can do either of these:

-- Assuming the variable "HumanoidRootPart" is defined. 
playerV.Force = HumanoidRootPart.CFrame * Vector3.new(2, 0, 0)
-- or:
playerV.Force = HumanoidRootPart.CFrame.RightVector * 2

-- with the force being relative to the world:
playerV.RelativeTo = Enum.ActuatorRelativeTo.World

Just a suggestion, but I would highly recommend using descriptive variable names. playerV doesn't really say that is a vector force, but it can be assumed that is something associated with the player. I would prefer using playerVectorForce or playerForce if you want something shorter, although it shouldn't be ingrained to choose less length over proper description, if the former result is very less descriptive

This discussion is preserved as it was. New answers, comments, and votes are closed.