Возникла странная ошибка столкновения между коллайдерами блоков и tilemaps

#c# #unity3d #collider

#c# #unity3d #коллайдер

Вопрос:

Это мой код перемещения игрока:

Видеозапись ошибок и элементов инспектора:

https://imgur.com/a/bmGqL1M

Как вы можете видеть в этом видео Imgur, по какой-то причине мой персонаж игрока, а также перемещаемый ящик, могут вставляться в эту карту листов на несколько пикселей. Я не совсем уверен, почему это происходит, поскольку я добавил составной Collider2D в tilemap, чтобы избавиться от очень распространенной ошибки «застревания в tilemap», чего здесь нет, отсечение фактически никак не изменяет движение.

 using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    [Header("Movement")]
    [SerializeField] private float movementSpeed;
    [SerializeField] private float jumpForce;

    [Header("Jumping")]
    private bool isGrounded;
    [SerializeField] private Transform feetPos;
    [SerializeField] private float checkRadius;
    [SerializeField] private LayerMask whatIsGround;
    [SerializeField] private float hangTime;
    private float hangCounter;

    private Rigidbody2D rb;
    private SpriteRenderer sr;

    private float moveX;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        sr = GetComponent<SpriteRenderer>();
    }

    void Update()
    {
        GetInput();
        BetterJump();
    }

    void BetterJump()
    {
        isGrounded = Physics2D.OverlapCircle(feetPos.position, checkRadius, whatIsGround);

        if (isGrounded)
        {
            hangCounter = hangTime;
        } else
        {
            hangCounter -= Time.deltaTime;
        }

            if (hangCounter > 0 amp;amp; Input.GetKeyDown(KeyCode.Space))
        {
            rb.velocity = Vector2.up * jumpForce;
        }


        if (Input.GetButtonUp("Jump") amp;amp; rb.velocity.y > 0)
        {
            rb.velocity = new Vector2(rb.velocity.x, rb.velocity.y * .5f);
        }
    }

    void FixedUpdate()
    {
        Move();
    }

    void Move()
    {
        rb.position  = new Vector2(moveX, 0) * Time.deltaTime * movementSpeed;
    }

    void GetInput()
    {
        moveX = Input.GetAxisRaw("Horizontal");

        if(moveX < 0)
        {
            sr.flipX = true;
        }
        else if (moveX > 0)
        {
            sr.flipX = false;
        }
    }
}
 

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

1. tbh Я не думаю, что это меня беспокоило бы на самом деле ^^ это даже выглядит более «естественным» таким образом ^^

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