Проблема с телепортацией персонажа при повороте в Unity может быть вызвана несколькими причинами. В коде, который вы показали, используется изменение масштаба объекта для поворота персонажа. Однако, если объект имеет родительский объект или сложную иерархию, изменение масштаба может привести к неожиданным перемещениям.
Вот несколько шагов, которые могут помочь решить проблему:
Проверка иерархии объектов: Убедитесь, что объект персонажа не вложен в другие объекты, у которых также могут изменяться координаты или масштаб.
Центрирование персонажа: Проверьте, что центр объекта (pivot point) находится в правильном положении. Если он смещен, изменение масштаба может привести к перемещению персонажа.
Использование переворота через Rotation: Вместо изменения масштаба попробуйте изменить вращение объекта. Это можно сделать следующим образом:
void Flip()
{
facingRight = !facingRight;
transform.Rotate(0f, 180f, 0f);
}
Отладка кода: Добавьте логирование перед и после изменения масштаба или вращения, чтобы увидеть, как изменяются координаты объекта. Это поможет понять, в какой момент происходит телепортация.
улучшенныйо код
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Run : MonoBehaviour
{
private Rigidbody2D rb;
private float horizontalMove = 0f;
private bool facingRight = true;
[Header("Player Movement Settings")]
public Animator animator;
public float speed = 1f;
void Start()
{
rb = GetComponent();
}
void Update()
{
horizontalMove = Input.GetAxisRaw("Horizontal") * speed;
animator.SetFloat("HorizontalMove", Mathf.Abs(horizontalMove));
}
private void FixedUpdate()
{
Vector2 targetVelocity = new Vector2(horizontalMove * 10f, rb.velocity.y);
rb.velocity = targetVelocity;
if (facingRight == false && horizontalMove > 0)
{
Flip();
}
else if (facingRight == true && horizontalMove < 0)
{
Flip();
}
}
void Flip()
{
facingRight = !facingRight;
transform.Rotate(0f, 180f, 0f);
}
}