Unity3d 矢量2.反射而不是按其应有的方式反射

Unity3d 矢量2.反射而不是按其应有的方式反射,unity3d,linear-algebra,Unity3d,Linear Algebra,我有一个球像这样移动: ⚽ ⭩ |‾‾‾‾‾‾| 假设它的速度是(-1,-1)。当它与地面碰撞时,它的速度应该是(-1,1),因为它将继续向左移动,但它将开始向上移动(考虑到重力是不必要的) 碰撞的法向量为(0,1) 当我使用Vector2.Reflect(velocity,normal)时,它会返回(1,-1),而不是返回(-1,1) 看起来它在法向量(1,0)上反射,但它不是。我做错了什么?PS:我刚刚通过将法向量旋转90º解决了这个问题,但这似乎是一个解决办法。看,

我有一个球像这样移动:

      ⚽
    ⭩ 
|‾‾‾‾‾‾|
假设它的速度是(-1,-1)。当它与地面碰撞时,它的速度应该是(-1,1),因为它将继续向左移动,但它将开始向上移动(考虑到重力是不必要的)

碰撞的法向量为(0,1)

当我使用Vector2.Reflect(velocity,normal)时,它会返回(1,-1),而不是返回(-1,1)


看起来它在法向量(1,0)上反射,但它不是。我做错了什么?

PS:我刚刚通过将法向量旋转90º解决了这个问题,但这似乎是一个解决办法。看,我完全按照链接中的答案做了,唯一的区别是我代码中的间接方式是
冲突。相对水平
,其中
冲突
OnCollisionInter2d
的参数,但我很确定这不是问题所在。是否打印'collision.relativelocity',这个值是多少?我猜你假设的坐标系和使用的坐标系不一样。例如,当你说,
让我们假设它的速度是(-1,-1)
这在单位中是真的,还是你只是假设那些值?PS:我刚刚通过旋转法向量90º来解决它,但这似乎是一个解决办法。看,我完全按照链接中的答案做了,唯一的区别是我代码中的间接方式是
冲突。相对水平
,其中
冲突
OnCollisionInter2d
的参数,但我很确定这不是问题所在。是否打印'collision.relativelocity',这个值是多少?我猜你假设的坐标系和使用的坐标系不一样。例如,当你说,
让我们假设它的速度是(-1,-1)
这在Unity中是真的,还是你只是假设这些值?
What I want              What it returns

       ⚽                           ⚽  
    ⭦⭩                            ⭩
 |‾‾‾‾‾‾|                      |‾‾‾‾‾‾|
                                    ⭨