I have looked everywhere including the Unity documentation but cannot seem to find any good examples of how to use Unity's Vector2.Reflect() function. I am trying to use this to control the direction of the ball (in a 2D Breakout game) when it hits a wall. It takes 2 arguments (inDirection, inNormal) but I cannot seem to figure out how to use this. Any help would be appreciated.
Unity - how to use Vector2.Reflect()
Asked Answered
Vector2 Reflect(Vector2 inDirection, Vector2 inNormal)
:
inDirection
: black arrow
inNormal
: red arrow
return output
: green arrow
Isn't this more of a bounce (of invisible wall defined by normal) than a reflect (around the norm vector)? A true vector reflection would be like in the image but with black arrow reversed –
Holst
@Holst In the diagram, you want to reflect the vector off the blue vertical line, as if the blue line was a mirror. The diagram is correct. –
Hypogastrium
@shieldgenerator7, I see there is always this perspective thought shift, when I look at the normal as the actual mirror –
Holst
The inDirection
should be the velocity of your ball and the inNormal
should be the unit vector that is perpendicular to your wall.
Try putting this in your ball object:
void OnCollisionEnter(Collision collision)
{
Vector2D inDirection = GetComponent<RigidBody2D>().velocity;
Vector2D inNormal = collision.contacts[0].normal;
Vector2D newVelocity = Vector2D.Reflect(inDirection, inNormal);
}
NOTE: I cannot currently test that code, so it may need tweaking in terms of the names of things.
Looks like inNormal must really be a unit vector, or your result will be messed up, as Unity would apply a raw formula without normalizing it for performance. –
Pylon
@Pylon That's what I was wondering too. So far my tests have shown that the
ContactPoint2D.normal
is always a unit vector –
Hypogastrium © 2022 - 2024 — McMap. All rights reserved.