Enregistrez les fosses rencontrées dans l'unité d'apprentissage personnel (1) Les personnages -2D frappent le mur et se tordent

Le code qui pose problème est le suivant:

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;
    }
}

Le script est monté sur le lecteur. Lorsque le joueur rencontre un collisionneur d'un corps rigide statique dans la direction horizontale, une pression continue sur le bouton de déplacement peut provoquer des contractions du personnage d'un côté à l'autre. Dans le même temps, on observe que position.x va trembler dans une très petite plage, et potion.y diminuera à un très petit rythme.

Soit changer la méthode de retournement de l'objet de gauche à droite pour modifier l'échelle locale ou changer la méthode de déplacement de l'objet de la modification de la vitesse à l'addforce ne peut pas résoudre le problème.

Une solution envisageable: le code pour juger de l'orientation de l'objet n'est pas placé sous le jugement de rb.velocity.x, le code modifié est le suivant

   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;
    }

(La première fois que j'ai essayé de créer un jeu, je n'étais pas très expérimenté. S'il y a un meilleur moyen ou si vous en connaissez la raison, j'espère que vous pourrez le signaler dans la section des commentaires.)

Je suppose que tu aimes

Origine blog.csdn.net/wsWind/article/details/108966363
conseillé
Classement