



Reply From: 
jgodfrey 
Both Vector2
and Vector3
have a clamp()
method. I assume that’s what you’re looking for?
I have been able to clamp my “MoveDirection”… for Instance, If I have:
clamp(MoveDirection.x, .15, .15)
The Direction Will Successfully Clamp on the X axis, But not according to the Character, But Globally, Which is good
But I need to have a Clamping Variable, Which will Clamp this Vector3 according to where a Velocity is quickly Haulted (The Direction of the Hit Surface)
I can use CharacterBody3D’s velocity to determine where to Add the Clamp based on its immediate Change? Therefor I am trying to figure out how I can achieve this
Nickyroo  20230615 16:57
Ah, got it. You probably want something like:
var v3 = Vector3(10,10,10)
v3 = v3.normalized() * 2
That’ll create a new vector with length 2 from the original vector (keeping the same direction). So, just normalize your original vector and multiply it by the clamped length you want…
jgodfrey  20230615 17:03
I am a bit Confused how to use this formula, here is what I am currently using if it could help…
if Vector3(MainBody.velocity.x, 0, MainBody.velocity.z) != (MoveDirection * BaseSpeed):
print("HittingWall")
(the yaxis is not being Used for MoveDirection, that Axis is seperate with its own features)
I have Tried to Clamp MoveDirection (Clamping the Velocity of MainBody does nothing), But I keep having issues where I begin to Bounce off into space or the Screen Crashes when Interacting from Certain Angles
Do you know how to properly Clamp a Vector3 Velocity? (This would apply to MoveDirection since (MoveDirection * 2) == the Velocity when not stopping on a surface)
Also the Console does print “HittingWall” whenever I push into a surface, And if I release the Keys it successfully Haults printing
Nickyroo  20230615 17:36
I am testing this var that you have shown me, I believe this is the Correct Answer given I make Correct Configurations, But I need to of course, further progress with Construction of the Clamp involving this formula… For instance I notice in the Debugging, “v3” Correctly Pushes toward the Walls angle when Hitting, Working on all Sides which is great! and I can see that this is a correct piece of the puzzle
But I will not be able to further test or respond for at least 6 hours due to my Schedule… But Thank you, your Help has been much appreciated! and If this is Successful I will label my Question as Answered by you
Nickyroo  20230615 17:52
Do you know how to properly Clamp a Vector3 Velocity?
The above code (based on normalize
) is the correct way to change the length of a vector without changing its direction  assuming you know the length you want the vector to be.
If you still want to use the inbuilt Vector3.clamp()
method to limit the length of your vector based on a min and max vector, you could do something like this:
var v_org = Vector3(10,10,10)
var v_min = v_org.normalized() * 1
var v_max = v_org.normalized() * 5
var v_new = v_org.clamp(v_min, v_max)
print("Org Vector: %s, %s" % [v_org, v_org.length()])
print("New Vector: %s, %s" % [v_new, v_new.length()])
prints:
Org Vector: (10, 10, 10), 17.3205089569092
New Vector: (2.886751, 2.886751, 2.886751), 4.99999952316284
 v_org = the original vector needing to be clamped
 v_min = a vector, based on the original, created with the minimum length (1 here)
 v_max = a vector, based on the original, created with the maximum length (5 here)
Notice that the orignal vector has a length of ~17.3. I’ve elected to clamp that vector’s length to be between 1 and 5 (the length of min and max vectors). The resulting vector still has the same direction as the original, but has a length of 5.
jgodfrey  20230615 18:11
I do not understand what %s does
Nickyroo  20230616 04:21
It’s not important for what I was trying to show but it’s just a placeholder in the string where variable values will be inserted.
jgodfrey  20230616 11:02