如何找到旋转矩形的新中心以进行角色碰撞? Unity2D

时间:2018-01-09 06:14:13

标签: c# unity3d math geometry rectangles

我一直在为2D Unity游戏改变碰撞器编程无数的角色动画,但我很难弄清楚如何为俯卧动画找到旋转矩形的新中心。旋转矩形不是问题,因为我只是将矩形的当前长度设置为新的宽度,反之亦然。问题是我的新矩形落到了地面,因为它的中心(或者#34;偏移,#34;正如Unity所说的那样)与默认对撞机相同;当我按下俯卧按钮时,它会短暂地在空中。

基本上,我希望在我的游戏中发生以下情况:

  1. 我的角色与他的默认长方形对撞机直立,由于重力而与地面相撞。

  2. 我按下一个按钮,矩形被重新分配,使其看起来旋转90度,但是它的新中心使得我的角色在整个时间内仍然接触地面。

    < / LI>

    这是一张希望更好地解释事情的图片:https://imgur.com/d9BaJ9R

    我能够使用类似的逻辑编写一个蹲伏动画,但无法解决如何将其应用于此场景的问题。这是成功的代码:

        boxCollider.size = new Vector2(boxCollider.size.x, boxCollider.size.y * .5f);
        boxCollider.offset = new Vector2(boxCollider.offset.x, boxCollider.offset.y - (boxCollider.size.y * .5f));
    

2 个答案:

答案 0 :(得分:0)

你需要这个吗?

交换维度:

boxCollider.size = new Vector2(boxCollider.size.y, boxCollider.size.x); 

将新的中心高度设置为新矩形的半高(保持x相同):

 boxCollider.offset = new Vector2(boxCollider.offset.x, boxCollider.size.y * .5f);

答案 1 :(得分:0)

感谢MBo帮我重新思考一下。答案实际上与我之前发布的代码非常相似。

    boxCollider.size = new Vector2(boxCollider.size.y, boxCollider.size.x);
    boxCollider.offset = new Vector2(boxCollider.offset.x, boxCollider.offset.y - (boxCollider.size.y * .5f));

这样可以正确设置新的矩形中心,当玩家再次站起来时,当然可以轻松反转。