C# 由于某种原因,碰撞器会碰撞,我能飞

C# 由于某种原因,碰撞器会碰撞,我能飞,c#,unity3d,2d,collision,collider,C#,Unity3d,2d,Collision,Collider,我正在制作一个Unity 2D游戏的小型原型。我的角色有两个对撞机。这对我很有帮助,因为我希望我的角色能够跳墙。这意味着当我与墙碰撞时,我的碰撞器检测脚本假定我正在碰撞2个碰撞器,并帮助我自定义动画 //on the ground, change y position as necessary, and if you are pressing up, held = true if (InAirDetection.AirDetect == 1) {

我正在制作一个Unity 2D游戏的小型原型。我的角色有两个对撞机。这对我很有帮助,因为我希望我的角色能够跳墙。这意味着当我与墙碰撞时,我的碰撞器检测脚本假定我正在碰撞2个碰撞器,并帮助我自定义动画

     //on the ground, change y position as necessary, and if you are pressing up, held = true
     if (InAirDetection.AirDetect == 1)
     {

         position.y += MoveUnitsPerSecond * verticalInput * Time.deltaTime;
         if (Input.GetButton("Vertical") == true)
         {
             held = true;
         }
         position.y += MoveUnitsPerSecond * verticalInput * Time.deltaTime;
     }

     //on the wall, change y position as neccessary, and if you are pressing up, held = true
     if (InAirDetection.AirDetect == 2)
     {

         position.y += MoveUnitsPerSecond * verticalInput * Time.deltaTime;
         if (Input.GetButton("Vertical") == true)
         {
             held = true;
         }
     }


     //in the air, if held is true, change y. If you aren't pressing up, held is false.
     if (InAirDetection.AirDetect == 0)
     {
         if (held == true)
         {
             position.y += MoveUnitsPerSecond * verticalInput * Time.deltaTime;
         }
         if (Input.GetButton("Vertical") == false)
         {
             held = false;
         }
     }

 }
 // apply the transformations
 transform.position = position;
这是我的一些代码。我试着让它这样,如果我把它放在空中,再按一次,什么也不会发生。它可以工作,但有一个小问题

通过将一个碰撞器(头部)撞击不同的碰撞器(天花板),头部进入身体碰撞器。这使得对撞机检测认为总是有一个对撞机在碰撞,而我在坚持。这意味着我可以跳到预期高度的5倍左右。另一个副作用是,有时似乎有一个力作用在物体的一侧,如风。这种情况并不总是发生


我如何才能完全删除该错误?是我让角色拥有一个碰撞器的唯一选择吗?

我有一行额外的代码。另外,我稍微改变了对撞机的位置。 这是额外的一行:

position.y+=MoveUnitsPerSecond*垂直输入*时间.deltaTime

还有,我的空气检测系统有缺陷,但我已经修复了,所以一切都很好!
然而,现在,如果我拿着它跳起(或者跳起,放开,在落地之前再打起来),我会跳得高出1.8/1.9个单位。不过没关系。

我有一行额外的代码。另外,我稍微改变了对撞机的位置。 这是额外的一行:

position.y+=MoveUnitsPerSecond*垂直输入*时间.deltaTime

还有,我的空气检测系统有缺陷,但我已经修复了,所以一切都很好!
然而,现在,如果我拿着它跳起(或者跳起,放开,在落地之前再打起来),我会跳得高出1.8/1.9个单位。不过没关系。

让一个碰撞器标记墙(或将它们放在一层)然后检查碰撞器是否接触到墙不是更容易吗?你可以排除这两个碰撞器相互检测。然而,我不知道如何在Unity中做到这一点。@Christopher,我也想弄清楚,哈哈。@jmalenfant,拥有一台对撞机将很难自定义动画或精灵的姿势。不过,如果你也有解决办法,我不介意使用你的答案。@Christopher derHugo能够在这里找到答案:幸运的是,我找到了解决办法,所以不用担心!让一个碰撞器标记墙(或将它们放在一层)然后检查碰撞器是否接触到墙不是更容易吗?您可以排除这两个碰撞器相互检测。然而,我不知道如何在Unity中做到这一点。@Christopher,我也想弄清楚,哈哈。@jmalenfant,拥有一台对撞机将很难自定义动画或精灵的姿势。不过,如果你也有解决办法,我不介意使用你的答案。@Christopher derHugo能够在这里找到答案:幸运的是,我找到了解决办法,所以不用担心!