Перса телепортирует когда он разворачивается, 2D

скорее всего с FacingRight что то не то

но на одной сцене это работает правильно , а на новой сцене не работает

ну он поворачивает лицо но его так же тепает в сторону


using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq.Expressions;
using System.Security.Cryptography;
using UnityEngine;
using UnityEngine.SceneManagement;

public class cntrl : MonoBehaviour
{
    public float speed;
    public float jumpForce;
    private float moveInput;

    public Joystick joystick;

    private Rigidbody2D rb;

    private bool facingright = true;

    private bool IsGrounded;
    public Transform feetPos;
    public float checkRadius;
    public LayerMask whatIsGrounded;

    private Animator anim;

    private void Start()
    {
        anim = GetComponent<Animator>();
        rb = GetComponent<Rigidbody2D>();
    }

    private void FixedUpdate()
    {
        moveInput = joystick.Horizontal;
        rb.velocity = new Vector2(moveInput * speed, rb.velocity.y);
        if (facingright == false && moveInput > 0)
        {
            Flip();
        }
        else if (facingright == true && moveInput < 0)
        {
            Flip();
        }
        if (moveInput == 0)
        {
            anim.SetBool("IsRunning", false);
        }
        else
        {
            anim.SetBool("IsRunning", true);
        }
    }

    private void Update()
    {

        {
            IsGrounded = Physics2D.OverlapCircle(feetPos.position, checkRadius, whatIsGrounded);
        }

    }
    public void OnJumpButtonDown()
    {
        if (IsGrounded == true)
        {
            rb.velocity = Vector2.up * jumpForce;
        }
    }

    void Flip()
    {
        facingright = !facingright;
        Vector3 Scaler = transform.localScale;
        Scaler.x *= -1;
        transform.localScale = Scaler;
    }
}

проблему решил

Так и в чем была проблема?) Вдруг кому-то еще поможет.

Что-то это вообще не выглядит похожим на поворот. scale это ж размер. :thinking:

проблема была в том что у плеера и body надо было сбросить position на 0

у меня просто каждый спрайт отдельный. Рука один спрайт, вторая рука другой спрайт. Так вот у плеера в который мы запихнули эти спрайты надо было сбросить position, у Body тоже

а насчёт Scale я хз я в интернете нашёл, у мен всё работает

1 лайк

А, да, отрицательный scale и правда переворачивает.

Но для спрайтов можно просто менять flipX у SpriteRenderer.

Так не надо писать, для bool == не нужен потому что bool и так является bool’ом )
Хватит просто if (facingRight) для true и if (!facingright) для false.

https://metanit.com/sharp/tutorial/2.24.php

Тут поспорю немного, сорри (чтоб меня никто не забывал :laughing:)

Так-то оно так, необходимости писать сравнение с true и false нет. Но вот когда третий час дебажишь какую-то дурацкую ошибку, не сложно пропустить почти незаметный “!” перед переменной и зависнуть с ней еще на три часа.

Короче, чисто с точки зрения человека, которому приходится чаще копаться в чужих ошибках, чем писать собственный код, facingright == false предпочтительнее.

Зато оно читается удобнее, как нормальное или почти нормальное предложение на английском (в зависимости от имен). :slight_smile:

if not visible вместо if visible is false
Еще в некоторых языках можно допустить ошибку написав = вместо ==, поэтому люди бывают ставят константу влево и получается вообще странно: if false is visible :crazy_face: (впрочем эти ошибки про = ловят линтеры или даже компилятор)

… а если бы сделали not вместо ! как в Питоне и Паскале, то не было б таких проблем )

мужик, у меня такая же проблема как и у тебя, только у меня телепортируется враг, он должен идти между двумя точками, мог ли бы ты дать мне свой дс или объяснить всё на пальцах ?