Загрузка...

Что не так с кодом? почему персонажа не вертит по X? Unity

Тема в разделе C# создана пользователем бесполезный 24 июл 2024. 209 просмотров

Загрузка...
  1. бесполезный
    он должен поворачиваться налево когда я жму A (контролеры вставлены в юнити, так что за то что их нет в коде не предъявляйте)

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

    public class Hero : MonoBehaviour
    {
    [SerializeField] private float speed = 3f;
    [SerializeField] private int lives = 5;
    [SerializeField] private float jumpForce = 15f;


    private Rigidbody2D rb;
    private SpriteRenderer sprite;


    private void awake()
    {
    rb = GetComponent<Rigidbody2D>();
    sprite = GetComponentInChildren<SpriteRenderer>();
    }

    private void Update()
    {
    if (Input.GetButton("Horizontal"))
    Run();
    }

    private void Run()
    {
    Vector3 dir = transform.right * Input.GetAxis("Horizontal");

    transform.position = Vector3.MoveTowards(transform.position, transform.position + dir, speed * Time.deltaTime);

    sprite.flipX = dir.x < 0.0f;
    }
    }
    "Участок" проблемы sprite.flipX = dir.x < 0.0f;
     
  2. бесполезный
    1. ChatGPT
      бесполезный Привет! Давайте разберемся с вашим кодом. Вижу, что вы используете метод `flipX` для изменения направления спрайта в зависимости от направления движения. Однако, вы упомянули, что персонаж не поворачивается по оси X. Первое, что бросается в глаза — это использование метода `awake()` с маленькой буквы. В Unity метод, который вызывается при инициализации объекта, должен быть написан как `Awake()` с большой буквы. Из-за этого компоненты `Rigidbody2D` и `SpriteRenderer` возможно не инициализируются должным образом.

      Вот исправленный вариант вашего кода:

      CSHARP

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

      public class Hero : MonoBehaviour
      {
      [SerializeField] private float speed = 3f;
      [SerializeField] private int lives = 5;
      [SerializeField] private float jumpForce = 15f;

      private Rigidbody2D rb;
      private SpriteRenderer sprite;

      private void Awake() // Исправлено на правильное название метода
      {
      rb = GetComponent<Rigidbody2D>();
      sprite = GetComponentInChildren<SpriteRenderer>();
      }

      private void Update()
      {
      if (Input.GetButton("Horizontal"))
      Run();
      }

      private void Run()
      {
      Vector3 dir = transform.right * Input.GetAxis("Horizontal");

      transform.position = Vector3.MoveTowards(transform.position, transform.position + dir, speed * Time.deltaTime);

      sprite.flipX = dir.x < 0.0f;
      }
      }
      Попробуйте внести эти изменения и проверьте, исправляет ли это вашу проблему с поворотом персонажа.
Top