Znikanie sprita przy obrocie w lewo

Znikanie sprita przy obrocie w lewo
Antoni Jastrzębski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Ten błąd działa zawsze gdy przesyłam sobie plik app na telefon mojej gry z unity i tylko na jednym poziomie, szczerze nie mam pojęcia o co może chodzić nigdy z takim czymś się nie spotkałem. jakby jakiś inny sprite lub coś przysłaniało ten właściwy ponadto pojawia się to tylko gdy klikam przyciskiem w lewo, w prawą stronę nigdy tak się nie zrobiło.

Jeśli komuś to pomoże przesyłam kod od poruszania się graczem:

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

public class Moving : MonoBehaviour
{
    private Rigidbody2D rb;
    private bool moveLeft;
    private bool moveRight;
    private float horizontalMove;
    public float speed = 6;
    public float jumpSpeed = 11;
    bool isGrounded;
    private Animator anim;
    public AudioSource jumpAudio;

    // Start is called before the first frame update
    private void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        anim = GetComponent<Animator>();
        moveLeft = false;
        moveRight = false;
    }

    public void PointerDownLeft()
    {
        moveLeft = true;
    }

    public void PointerUpLeft()
    {
        moveLeft = false;
    }

    public void PointerDownRight()
    {
        moveRight = true;
    }

    public void PointerUpRight()
    {
        moveRight = false;
    }

    // Update is called once per frame
    void Update()
    {
        MovePlayer();
        UpdateAnimation();
    }

    private void MovePlayer()
    {
        if (moveLeft)
        {
            horizontalMove = -speed;
            transform.localEulerAngles = new Vector3(0.0f, -180.0f, 0.0f);
        }
        else if (moveRight)
        {
            horizontalMove = speed;
            transform.localEulerAngles = new Vector3(0.0f, 0.0f, 0.0f);
        }
        else
        {
            horizontalMove = 0;
        }
    }

    private void UpdateAnimation()
    {
        if (horizontalMove != 0)
        {
            anim.SetBool("isWalking", true);
        }
        else
        {
            anim.SetBool("isWalking", false);
        }
    }

    private void OnCollisionEnter2D(Collision2D other)
    {
        if (other.gameObject.tag == "Ground")
        {
            isGrounded = true;
        }
    }

    public void jumpButton()
    {
        if (isGrounded)
        {
            jumpAudio.Play();
            isGrounded = false;
            rb.velocity = Vector2.up * jumpSpeed;
        }
    }

    private void FixedUpdate()
    {
        rb.velocity = new Vector2(horizontalMove, rb.velocity.y);
    }
}

Na dole podaje screeny by było wiadomo o co chodzi

LukeJL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8536
2

może chodzi o oś obrotu?
Spróbuj obrócić o jakiś mały kąt / animować powoli obrót.

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7104
3

Obiekt Sprite'a ma komponent SpriteRenderer, czy MeshRenderer?

Jeśli MeshRenderer, to jego materiał powinien wyświetlać obie strony - w ustawieniach materiału Front/Back/Both.

Jeśli SpriteRenderer, to użyj jego pola Flip. Jeśli obiekt nie ma child obiektów, to najlepsze rozwiązanie.

241fcd62d3759179b785c61f57497233eb9d0100.png

Możesz też spróbować zamiast obracać obiekt, użyć skalowania.
transform.localScale = new Vector3(-1.0f, 1.0f, 1.0f);
transform.localScale = new Vector3(1.0f, 1.0f, 1.0f);

Czy Twój sprite to obracany obiekt, czy obracasz jego rodzica?
Możliwe, że sprite ma lokalną pozycję Z różną od 0 i jak obracasz jego rodzica, to wchodzi pod tło i dlatego znika.

No i jeszcze jak wygląda sorting order tła i postaci?

Antoni Jastrzębski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
1

Tak mój obiekt to SpriteRenderer Zrzut ekranu 2024-05-29 222917.png I jeśli chodzi o Rodzica to obracam obiektem jedyna rzecz dołączona do Player to jest Foot Position Zrzut ekranu 2024-05-29 223402.png a jeśli chodzi i poprawkę w kodzie do zmieniłem tylko że problem polega na tym że dopiero mogę z indetyfikować tą poprawkę na telefonie dlatego sobie już szybko przesyła plik.
Edit:
Po poprawce kodu sprite już nie znika po kliknięciu w lewo, dzięki wielkie za pomoc! @Spine

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7104
0

A tło też jest spritem i ma inny Sorting layer / Order in layer?
Bo jeśli ma takie same ustawienia sortowania jak sprite gracza, to brak problemów z kolejnością wyświetlania jest przypadkowy.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.