CharacterController застрял в верхней части блоков (проблемы с коллайдером?)

#c# #unity3d

#c# #unity3d

Вопрос:


(я редактирую код, ТЕПЕРЬ ОН РАБОТАЕТ (с функцией neu jump), проблема, похоже, в функции isGrouned (), но все еще не знаю, почему мой персонаж не всплывает grouned)

Символ застревает, когда я пытаюсь подскочить ближе к блоку (и двигаюсь в направлении блока). Какая-нибудь подсказка, что может происходить и как это решить?

ситуация:

ситуация

Кажется, что символ застревает, когда звезда коллайдера контроллера символов уменьшает радиус.

Информация о NavMesh: информация о NavMesh2 [Информация NavMesh2

символьный контроллер:

символьный контроллер

Я ожидал, что персонаж достигнет верхней части блока, или, по крайней мере, он сможет подняться на эту небольшую разницу

код перехода:

  public void jump()
    {

        if (OnSlope())
        {
            print("controller.height: "   controller.height);
            controller.Move(Vector3.down * controller.height / 2 * slopeForce * Time.deltaTime);
        }

        print("key press jump");

        JumpMode = true;
        StartCoroutine(JumpEvent());

    }

        private IEnumerator JumpEvent()
{
    controller.slopeLimit = 90.0f;
    float timeInAir = 0.0f;
    //print("IEnumerator JumpEvent");

    float timePassed = 0;
    while (timePassed < 1.5F)
    {
        float jumpForce = jumpFallOff.Evaluate(timeInAir);
        controller.Move(Vector3.up * jumpForce * jumpMultiplier * Time.deltaTime);
        timeInAir  = Time.deltaTime;
        // Code to go left here
        timePassed  = Time.deltaTime;

        yield return null;
    }

    /*
    do
    {
        float jumpForce = jumpFallOff.Evaluate(timeInAir);
        controller.Move(Vector3.up * jumpForce * jumpMultiplier * Time.deltaTime);
        timeInAir  = Time.deltaTime;
        //print("INTOWHILE JumpEvent");
        //print("inside- controller.isGrounded: "   controller.isGrounded);
        //print("inside-(controller.collisionFlags amp; CollisionFlags.Below) == 0): "   ((controller.collisionFlags amp; CollisionFlags.Below) == 0));//.ToString()
        //print("inside-((controller.collisionFlags amp; CollisionFlags.Above) == 0) "   ((controller.collisionFlags amp; CollisionFlags.Above) == 0));
        yield return null;

    }
    while (!controller.isGrounded);// amp;amp;  controller.collisionFlags != CollisionFlags.Below);//  .Above); ((controller.collisionFlags amp; CollisionFlags.Below) == 0) amp;amp; ((controller.collisionFlags amp; CollisionFlags.Above) == 0));//
    */


    //print("outside- controller.isGrounded: "   controller.isGrounded);
    //print("outside- (controller.collisionFlags amp; CollisionFlags.Below) == 0): "   ((controller.collisionFlags amp; CollisionFlags.Below) == 0));//.ToString()
    //print("outside- ((controller.collisionFlags amp; CollisionFlags.Above) == 0) "   ((controller.collisionFlags amp; CollisionFlags.Above) == 0));

    controller.slopeLimit = 45.0f;
    JumpMode = false;
}
  

Комментарии:

1. Вы используете navmesh?

2. @BugFinder да

3. вы сравнивали высоту блока с настройками navmesh для шагов?

4. @BugFinder для меня ничего странного. Я добавляю некоторую информацию NavMesh в сообщение, которая может помочь

5. Ваш блок высотой 1 м, и вы сказали ему, что он может подняться на 0,75 .. следовательно, он не поднимается на поле