Registra los pozos encontrados en la unidad de aprendizaje personal (1) Los personajes -2D golpean la pared y se mueven

El código que tiene el problema es el siguiente:

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

public class PlayController : MonoBehaviour
{
    
    
    [Header("移动参数")]
    public Vector2 currentVelocity;
    public float xInput;
    public float LRMoveForce;
   private void Start()
    {
    
    
        pos = GetComponent<Transform>();
        rb = GetComponent<Rigidbody2D>();
    }
    private void Update()
    {
    
    
        LRMovement();
    }

  private void LRMovement()
    {
    
    
        if (rb.velocity.x < 0)
        {
    
    
            faceDir = -1;
            pos.rotation = Quaternion.Euler(0, 180, 0);
            //transform.localScale = new Vector3(-1, 1, 1);

        }
        if (rb.velocity.x > 0)
        {
    
    
            faceDir = 1;
            pos.rotation = Quaternion.Euler(0, 0, 0);
            //transform.localScale = new Vector3(1, 1, 1);
        }

        xInput = Input.GetAxisRaw("Horizontal");      
        rb.velocity = new Vector2(xInput * LRMoveForce, rb.velocity.y);
        currentVelocity = rb.velocity;
    }
}

El guión está montado en el jugador.Cuando el jugador encuentra un colisionador de un cuerpo rígido estático en la dirección horizontal, presionar continuamente el botón de movimiento puede hacer que el personaje se mueva de un lado a otro. Al mismo tiempo, se observa que position.x temblará en un rango muy pequeño y que poción.y disminuirá a un ritmo muy pequeño.

Cambiar el método de voltear el objeto de izquierda a derecha para modificar la escala loacls o cambiar el método de mover el objeto de modificar la velocidad a agregar fuerza no puede resolver el problema.

Una solución factible: el código para juzgar la orientación del objeto no se coloca bajo el juicio de rb.velocity.x, el código modificado es el siguiente

   private void LRMovement()
    {
    
    
        if (rb.velocity.x < 0)
        {
    
    
            faceDir = -1;
            //pos.rotation = Quaternion.Euler(0, 180, 0);
            //transform.localScale = new Vector3(-1, 1, 1);

        }
        if (rb.velocity.x > 0)
        {
    
    
            faceDir = 1;
            //pos.rotation = Quaternion.Euler(0, 0, 0);
            //transform.localScale = new Vector3(1, 1, 1);
        }

        xInput = Input.GetAxisRaw("Horizontal");
        if (xInput < 0)
        {
    
    
            pos.rotation = Quaternion.Euler(0, 180, 0);
        }
        if (xInput > 0)
        {
    
    
            pos.rotation = Quaternion.Euler(0, 0, 0);
        }
        rb.velocity = new Vector2(xInput * LRMoveForce, rb.velocity.y);
        currentVelocity = rb.velocity;
    }

(No tengo mucha experiencia en intentar hacer un juego por primera vez. Si hay un método mejor o conozco el motivo, espero que lo puedas señalar en el área de comentarios).

Supongo que te gusta

Origin blog.csdn.net/wsWind/article/details/108966363
Recomendado
Clasificación