Problem z obrotem postaci po przez przyciski

0

Od dłuższego czasu nie wiem jak to naprawić i potrzebuje porady. Dodałem transform.Rotate do ruchu w prawo albo w lewo by zależnie czy się kliknie przycisk w prawo lub lewo w tą stronę ma postać się obrócić i w pewnym sensie to działa tylko gdy dłużej się przytrzyna przicisk to postać kręci się w dwie strony na sekunde jak by ten obrót się resetował. Poniżej przesyłam cały kod :

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 = 5;
    bool isGrounded;
    private Animator anim;

    // 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();
    }

    private void MovePlayer()
    {
        if (moveLeft)
        {
            horizontalMove = -speed;
            transform.Rotate(0, -180, 0);
        }
        else if (moveRight)
        {
            horizontalMove = speed;
            transform.Rotate(0, 180, 0);
        }
        else
        {
            horizontalMove = 0;
        }


    }

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

        }
    }

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

        }

    }

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

Użyłeś złej metody.
transform.Rotate obraca o zadaną wartość, a nie ustawia obrót na zadaną wartość.
Czyli w każdej klatce kręcisz postacią o bardzo duży skok - obrót o półpełny kąt.

Ty chcesz ustawić kąt, a nie obrócić.

Czyli:
transform.localEulerAngles = new Vector3(0.0f, -180.0f, 0.0f);
oraz
transform.localEulerAngles = new Vector3(0.0f, 180.0f, 0.0f);

0
Spine napisał(a):

Użyłeś złej metody.
transform.Rotate obraca o zadaną wartość, a nie ustawia obrót na zadaną wartość.
Czyli w każdej klatce kręcisz postacią o bardzo duży skok - obrót o półpełny kąt.

Ty chcesz ustawić kąt, a nie obrócić.

Czyli:
transform.localEulerAngles = new Vector3(0.0f, -180.0f, 0.0f);
oraz
transform.localEulerAngles = new Vector3(0.0f, 180.0f, 0.0f);

Dzięki wielkie za odpowiedź, spróbuję.

0
Spine napisał(a):

Użyłeś złej metody.
transform.Rotate obraca o zadaną wartość, a nie ustawia obrót na zadaną wartość.
Czyli w każdej klatce kręcisz postacią o bardzo duży skok - obrót o półpełny kąt.

Ty chcesz ustawić kąt, a nie obrócić.

Czyli:
transform.localEulerAngles = new Vector3(0.0f, -180.0f, 0.0f);
oraz
transform.localEulerAngles = new Vector3(0.0f, 180.0f, 0.0f);

Po zastosowaniu kodu postać obracasię np. w lewo ale już nie da się od obrócić postaci w żadną inną stronę zostaje już tak na zawsze nie wiem dlaczego to tak działaZrzut ekranu 2024-04-15 211257.png

1

No tak... Mea culpa.
Przecież -180 da taki sam rezultat jak +180...

W lewo daj -90, w prawo +90, a w else możesz dać 0.

No i najważniejsze. Nie wklejaj kodu jako obrazek.
Trzymaj się poziomu Twojego pierwszego posta.

0
Spine napisał(a):

No tak... Mea culpa.
Przecież -180 da taki sam rezultat jak +180...

W lewo daj -90, w prawo +90, a w else możesz dać 0.

No i najważniejsze. Nie wklejaj kodu jako obrazek.
Trzymaj się poziomu Twojego pierwszego posta.

dobra tylko, że ja potrzebuje obrót o 180 stopni,
jak dam -90 i +90 to mi postać wypadnie z mapy i zniknie jego sprite.

 private void MovePlayer()
    {
        if (moveLeft)
        {
            horizontalMove = -speed;
            transform.localEulerAngles = new Vector3(0.0f, -90.0f, 0.0f); // Ja bym dal -180 itd. no ale tak to nie dziala wiec nie wiem
            
        }
        else if (moveRight)
        {
            horizontalMove = speed;
            transform.localEulerAngles = new Vector3(0.0f, 90.0f, 0.0f);
        }
        else
        {
            horizontalMove = 0;
        }


    }

3

No to jeśli Twoja postać jest 2D, to wtedy w lewo będzie 180.0f, a w prawo 0.0f.

0
Spine napisał(a):

No to jeśli Twoja postać jest 2D, to wtedy w lewo będzie 180.0f, a w prawo 0.0f.

o kurde dobra, bardzo dziękuję za pomoc działa!

4

Na przyszłość jak widzisz jakąś wartość liczbową i nie jesteś pewny jak ona działa to pokombinuj z jej zmienianiem i oglądaj rezultat.
Powinieneś być w stanie sam wykminić właściwe wartości w ciągu paru minut. Jak będziesz wklejał tylko to co znajdziesz w necie to niczego się nie nauczysz i będziesz potrzebował pomocy z każdą taką bzdurką.

3

Poza tym w Unity masz edytor i możesz sobie tym spritem obracać i dobrać odpowiednie wartości do skryptu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1