Почему полигональный коллайдер 2d ограничивает движение игрока?

У меня есть облако, к которому прикреплен полигональный коллайдер 2d. Кроме того, у меня есть плеер, к которому прикреплен бокс-коллайдер 2d. Когда игрок приземляется на облако, в какой-то момент во время движения его что-то останавливает. Он оживляет, но не двигается.

Ниже изображение моих коллайдеров:

Игрок и облачные коллайдеры

Когда я запускаю игру, он двигается влево и вправо. Поэтому я решил, что это не проблема кода. В какой-то момент он застрял в указанном выше положении и не может двигаться вправо, но может двигаться влево. Полагаю, многоугольный коллайдер мешает ему двигаться. Когда я возвращаюсь, он идет, и когда он достигает указанного выше положения, он не может двигаться вперед.

Есть ли обходной путь для этого?

Ниже мой код:

public class Player : MonoBehaviour
{
    public float speed = 7f;
    public float maxVelocity = 8f;

    private Rigidbody2D rb;
    private Animator anim;


    void Awake()
    {
        rb = GetComponent<Rigidbody2D>();
        anim = GetComponent<Animator>();
    }

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        MovePlayerUsingKeyboard();   
    }

    public void MovePlayerUsingKeyboard()
    {
        float forceX = 0f;
        float velocity = Mathf.Abs(rb.velocity.x);
        Debug.Log("Player Velocity : " + velocity);

        float direction = Input.GetAxis("Horizontal");

        if (direction < 0)
        {
            if (maxVelocity > velocity)
            {
                anim.SetBool("Walk", true);
                forceX = -speed;                
            }
            //Changing the direction the player faces
            Vector3 temp = transform.localScale;
            temp.x = -1.3f;
            transform.localScale = temp;
        }
        else if (direction > 0)
        {
            if (maxVelocity > velocity)
            {
                anim.SetBool("Walk", true);
                forceX = speed;
            }
            Vector3 temp = transform.localScale;
            temp.x = 1.3f;
            transform.localScale = temp;
        }
        else
        {
            anim.SetBool("Walk", false);
        }

        rb.AddForce(new Vector2(forceX, 0));
    }
}

Узлы анимации


person Kiran Cyrus Ken    schedule 18.07.2020    source источник
comment
Вы пробовали использовать CapsuleCollider2D для своего персонажа игрока, а не BoxCollider2D? Похоже, BoxCollider может зацепиться за PolygonCollider. K Трудно сказать по картинке, но у многоугольного коллайдера есть неровная точка в том месте, где застрял персонаж.   -  person HumanWrites    schedule 18.07.2020
comment
да, я пробовал. но он сильно отскакивает, заставляя игрока выпрыгивать за пределы поля   -  person Kiran Cyrus Ken    schedule 18.07.2020


Ответы (1)


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

person Jelly Qwerty    schedule 18.07.2020