|
|
|
 |
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 | 2023-06-15 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 | 2023-06-15 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 y-axis 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 | 2023-06-15 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 | 2023-06-15 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 in-built 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 | 2023-06-15 18:11
I do not understand what %s does
Nickyroo | 2023-06-16 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 | 2023-06-16 11:02