#c# #unity3d #collider
#c# #unity3d #коллайдер
Вопрос:
Это мой код перемещения игрока:
Видеозапись ошибок и элементов инспектора:
Как вы можете видеть в этом видео 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 вы могли бы попытаться уменьшить, но это может привести к другим нежелательным результатам. Возможно, у вас есть материал по физике с некоторыми значениями, делающими элемент немного резиновым.